Dieses Mal war ich süchtig nach der Gefahr, als ich die in Active Hash gespeicherten Daten zur Produktbearbeitung aufrief, also werde ich sie weitergeben.
Ich habe verschiedene Suchanfragen in Qiita versucht, aber ich konnte es nicht lösen und wurde überflutet ...
Implementieren Sie die zu bearbeitende Funktion mit der Bearbeitungsaktion für das aufgelistete Element, indem Sie alle Daten einmal registrieren.
Der Punkt ist, dass beim Wechseln zum Bearbeitungsbildschirm die ursprünglich registrierten Daten registriert werden, ohne zurückgesetzt zu werden.
Es ist kein Problem, wenn die Aufrufbeschreibung der Ansichtsdatei und die Zuordnung des Modells erfolgreich verknüpft sind, aber ich habe einen festen Fehler gemacht.
Lassen Sie mich zuerst mit der Lösung beginnen.
Bei der Implementierung einer solchen Funktion lautet der Spaltenname der Daten in Active Hash xxx_id Sagen wir.
Beispielsweise sind Kategorien und Präfekturen für Lieferquellen feste Daten. Beschreiben Sie sie daher in Active Hash. Wenn Sie die Elementspalte verknüpfen, legen Sie sie hier fest als Kategorie-ID oder Präfektur-ID fest.
Im Gegenteil, wenn Sie eine Assoziation mit einem Modell bilden, Es sieht so aus, als gehört zu_active_hash: category, und Sie müssen _id nicht schreiben.
Der Code ist unten zusammengefasst, also hoffe ich, dass Sie ihn dort verstehen.
models/item.rb
---Kürzung---
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :category
belongs_to_active_hash :condition
belongs_to_active_hash :postage_type
belongs_to_active_hash :prefecture
belongs_to_active_hash :preparation_days
---Kürzung---
ruby:views/edit.html.erb
<div class="items-detail">
<div class="weight-bold-text">Produktdetails</div>
<div class="form">
<div class="weight-bold-text">
Kategorie
<span class="indispensable">Verpflichtend</span>
</div>
<%= f.collection_select(:category_id, Category.all, :id, :name, {}, {class:"select-box", id:"item-category"}) %>
<div class="weight-bold-text">
Produktzustand
<span class="indispensable">Verpflichtend</span>
</div>
<%= f.collection_select(:condition_id, Condition.all, :id, :name, {}, {class:"select-box", id:"item-sales-status"}) %>
</div>
</div>
Die Migrationsdatei lautet wie folgt. Bitte beachten Sie, dass der Spaltenname _id hat.
○○_create_items.rb
class CreateItems < ActiveRecord::Migration[6.0]
def change
create_table :products do |t|
t.string :name, null: false
t.text :explanation, null: false
t.integer :category_id, null: false
t.integer :condition_id, null:false
t.integer :postage_type_id, null:false
t.integer :prefecture_id, null:false
t.integer :preparation_days_id, null:false
t.integer :value, null:false
t.references :user, foreign_key: true
t.timestamps
end
end
end
Ich wurde überflutet, ohne zu bemerken, dass der Spaltenname _id haben musste. Sie können diese Theorie verstehen, indem Sie mit der Konsole spielen, aber ich hoffe, sie hilft demselben Anfänger, der immer noch nicht gut in der Fehlerbehebung ist und in Schwierigkeiten steckt.
Recommended Posts