[RAILS] Pulldown in der ursprünglichen App mit Active Hash implementiert

Heute habe ich implementiert, um dem neuen Registrierungsbildschirm ein Pulldown hinzuzufügen, mit dem ich mein eigenes Portfolio erstellen kann! Es ist eine Funktion, die ich unbedingt machen wollte. Wenn Sie sich also glücklich fühlen, wenn Sie es können. Das Gefühl, wenn dies getan wird, macht süchtig lol Hier gibt es eine Seite. Ich möchte den Montagevorgang grob ausgeben.

1, Active Hash eingeführt

Angenommen, Sie haben Daten, die im Wesentlichen unverändert sind. Es ist nicht erforderlich, es in der Datenbank zu speichern, da es sich im Grunde genommen um unveränderte Daten handelt. Wenn Sie diese Daten jedoch direkt in eine Ansichtsdatei usw. schreiben, sind sie nicht lesbar. Active Hash ist in solchen Fällen nützlich.

gem 'active_hash'

Installieren Sie zuerst dieses Juwel. (Am unteren Rand der Gemfile) Führen Sie dann die Bundle-Installation durch.

2, Modellerstellung

Dieses Mal implementieren wir ein Pulldown-Menü auf dem neuen Registrierungsbildschirm. Erstellen Sie daher wie gewohnt ein Benutzermodell. Machen Sie von hier aus ein anderes Modell zum Herunterziehen. In meinem Fall werde ich dieses Mal ein fan_history-Modell erstellen, um über die Fan-Geschichte des Sports zu sprechen.

% rails g model fan_history --skip-migration

Was sich vom Üblichen unterscheidet, ist "--skip-Migration". Dies ist eine Option, um zu verhindern, dass die Migrationsdatei beim Erstellen der Modelldatei generiert wird. Dieses Mal werden die Informationen zum Fan-Verlauf des Artikels nicht in der Datenbank gespeichert, sodass keine Migrationsdatei erstellt werden muss.

3, ActiveHash::Base ActiveHash :: Base kann dieselben Methoden wie ActiveRecord verwenden. Durch das Erben von ActiveHash :: Base können ActiveRecord-Methoden für Objekte verwendet werden, die im Genre-Modell definiert sind.

fun_history.rb


class FanHistory < ActiveHash::Base
  self.data = [
    { id: 1, name: '--' },
    { id: 2, name: '0~1 Jahr' },
    { id: 3, name: '1~5 Jahre' },
    { id: 4, name: '5~Dekade' },
    { id: 5, name: '10 Jahre oder länger' }
  ]
end

Ich werde es so schreiben. Ich möchte, dass Sie sich zweier Punkte bewusst sind. Bitte überprüfen Sie sie. Die erste ist, dass die erste Zeile standardmäßig nicht ActiveHash :: Base ist! Der zweite Punkt ist, dass das letzte Komma nicht in die Zeile mit der ID: 5 geschrieben wird! Dies ist ein Ort, an dem Sie vorsichtig sein sollten. Es ist ein kleiner Ort, aber ich habe es nicht bemerkt und es stagnierte ein wenig. Lol Übrigens, wenn Sie die Präfekturen niederreißen wollen, ist es sehr mühsam zu beschreiben, daher denke ich, dass es besser ist, sie aus dem Netz zu holen.

4, bearbeiten Sie die Migrationsdatei

20201029085540_devise_create_users.rb


      t.string  :nickname,           null: false
      t.string  :email,              null: false, default: ""
      t.string  :encrypted_password, null: false, default: ""
      t.integer :fan_history_id,     null: false  

Auch hier sind zwei Punkte zu beachten. Das erste ist, dass _id hinzugefügt wird, um die ID in der Benutzertabelle zu speichern! Das zweite ist, dass es ursprünglich eine Zeichenfolge war, aber es wurde in eine Ganzzahl geändert! Es ist ein Muster. Wenn Sie es verstehen, ist es leicht zu merken. Vergessen Sie nicht db: migrieren

5, Zuordnung und Validierung festlegen

user.rb


  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :fan_history
  validates :fan_history_id, numericality: { other_than: 1 }
 

Denken Sie daran, die erste Zeile in must zu schreiben. Ich werde die Erklärung der Bedeutung weglassen. Die zweite Zeile beschreibt die normale Zuordnung zu active_hash. Die dritte Zeile verhindert das Speichern, wenn das Pulldown-Menü "-" ausgewählt ist. Wenn Sie von id1 von fan_history.rb schreiben, ist die normale Validierung in Ordnung.

6, Implementierung eines neuen Registrierungsbildschirms

new.html.erb


<%= f.collection_select(:fan_history_id, FanHistory.all, :id, :name, {}, {class:"fan_history-select"}) %>

Stellen Sie eine Verbindung mit Routing und Controller her und schreiben Sie diese Beschreibung schließlich in die neu registrierte Ansicht. Dies ist auch ein Muster, daher war es leicht zu merken. Die Form ist so.

new.html.erb


<%= form.collection_select(Spaltenname, der gespeichert werden soll,Array von Objekten,In Spalten gespeicherte Elemente,Spaltenname wird in den Optionen angezeigt,Möglichkeit,HTML-Option) %>

Zusammenfassung

Der Arbeitsaufwand ist relativ groß, aber ich hatte das Gefühl, dass es sehr einfach ist, sich an den Fluss zu erinnern. Wenn es die erste Implementierung ist, wird es einige Zeit dauern und ich denke, es ist natürlich und es kann ein Fehler auftreten, aber es ist relativ schwer zu verstehen und ich denke, dass es stundenlang keinen stickigen Fehler geben wird. Wenn also ein Fehler auftritt, Tippfehler oder Ablauf Sie sollten denken, dass es ein Fehler im Inneren ist. Um die Anzahl der Tabellen nicht verschwenderisch zu erhöhen, verwenden wir ActiveHash, wenn die zu verarbeitenden Daten im Wesentlichen unverändert bleiben.

Recommended Posts

Pulldown in der ursprünglichen App mit Active Hash implementiert
Listen Sie den Inhalt von Kategorien auf, die mit Active Hash erstellt wurden
Mit CSS in die Mitte legen
[Rails] So wenden Sie das in der Hauptanwendung verwendete CSS mit Administrate an
Füllen Sie den Bildschirm mit Schaltflächen in TableLayout
Sinatra App mit ActiveRecord starb in Passenger 6.0.5
Versuchen Sie es mit der Ressourcenanweisung in der Web-App
Verwenden Sie JDBC Manager mit den Einstellungen in jdbc.dicon.
Holen Sie sich Ihre Versionsnummer in der Android-App