Eine Funktion, mit der Sie eine Präfektur aus dem Pulldown-Menü auswählen können, die häufig in Fragebögen angezeigt wird. , Sie können die Möglichkeit haben, mit der Methode form_with zu posten. Es ist jedoch einfacher, die Präfektur zu verwenden, wenn sie numerisch in der Tabelle verwaltet wird. Um mit numerischen Werten umgehen zu können, müssen der Name der Präfektur und die damit verbundene Nummer im Voraus vorbereitet werden. ActiveHash ist in solchen Fällen eine bequeme Funktion.
Gem, mit dem Sie Daten verarbeiten können, ohne sie in der Datenbank zu speichern, indem Sie Daten eingeben, die sich im Modell grundsätzlich nicht ändern. Wird hauptsächlich verwendet, wenn Sie in der Ansicht als Pulldown-Menü angezeigt werden möchten.
Das offizielle Dokument ist hier
OK in der untersten Zeile der Datei
Gemfile
gem 'active_hash'
% bundle install
%Schienen g Modell Modellname--skip-migration
Der Modellname sollte so sein, dass die Pulldown-Menüs zusammengefasst sind. ex) Baseball, Fußball, Tennis ... Beim Erstellen eines Pulldown-ähnlichen Namens lautet der Modellname "Sport".
Durch Hinzufügen der Option --skip-migration wird die Migrationsdatei nicht generiert. ActiveHash wird nicht in der Datenbank gespeichert, daher ist keine Migrationsdatei erforderlich.
Im Folgenden wird das Pulldown-Menü des Sports als Beispiel beschrieben.
Ändern Sie das in "3. Modellgenerierung" erstellte Modell in die folgende Beschreibung.
app/models/sport.rb
class Sport < ActiveHash::Base
self.data = []
end
Durch das Erben von ActiveHash :: Base können ActiveRecord-Methoden verwendet werden.
Hash den Inhalt des Pulldowns in das Array.
app/models/sport.rb
class Sport < ActiveHash::Base
self.data = [
{ id: 1, name: '---' },
{ id: 2, name: 'Baseball' },
{ id: 3, name: 'Soccer' },
{ id: 4, name: 'Tennis' }
]
end
Nachfolgend finden Sie eine Erläuterung der Annahme, dass bereits eine Tabelle zum Speichern eines anderen Beitrags vorhanden ist.
app/models/post.rb
class Post < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :sport
end
Die Beschreibung von "Erweitern von ActiveHash :: Associations :: ActiveRecordExtensions" ermöglicht die Verwendung der "Gehört_zu_aktiven_Hash-Methode".
Assoziationen im Sportmodell müssen nicht beschrieben werden.
* Beachten Sie, dass sich die Beschreibung von der normalen Zuordnung </ font> unterscheidet
app/models/post.rb
class Post < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :sport
validates :sport_id, presence: true #Leerer Beitrag kann nicht gespeichert werden
validates :sport_id, numericality: { other_than: 1 }
#Die Pulldown-Auswahl lautet "--Kann nicht gespeichert werden, wenn
end
collection_select(Spaltenname, der gespeichert werden soll,Array von Objekten,In Spalten gespeicherte Elemente,Spaltenname wird in den Optionen angezeigt,Möglichkeit,HTML-Option)
collection_select(:sport_id, Sport.all, :id, :name, {}, {class:"sport-select"})
Zu speichernder Spaltenname: In welcher Spalte der zu speichernden Tabelle.
Array von Objekten: Wenn Sie den gesamten Hash des Arrays anzeigen möchten, können Sie .all
verwenden.
In der Spalte gespeicherte Elemente: In app / models / sport.rb
möchte ich den Teil, der id:
war, in der Spalte speichern.
Spaltenname, der in den Optionen angezeigt wird: Zeigen Sie den Teil von app / models / sport.rb
an, der im Pulldown-Menü als name:
festgelegt wurde.
Optional: nach Bedarf
HTML-Option: Klassenname usw.
Auf jeden Fall hat die collection_select-Methode zu viele Argumente, was verwirrend sein kann ...
Recommended Posts