Cette fois, j'étais accro à l'écueil en appelant les données stockées dans Active Hash pour l'édition du produit, je vais donc les partager.
J'ai essayé diverses recherches dans qiita, mais je n'ai pas pu le résoudre et j'ai été submergé ...
Implémentez la fonction d'édition avec l'action d'édition pour l'élément qui a été répertorié en enregistrant toutes les données une fois.
Le fait est que lorsque vous passez à l'écran d'édition, les données initialement enregistrées sont enregistrées sans être réinitialisées.
Il n'y a pas de problème si la description d'appel du fichier de vue et l'association du modèle sont correctement liées, mais j'ai fermement commis une erreur.
Permettez-moi de commencer par la solution.
Lors de l'implémentation d'une fonction comme celle-ci, le nom de colonne des données dans Active Hash est xxx_id Disons.
Par exemple, les catégories et les préfectures de source de livraison sont des données fixes, alors décrivez-les dans Active Hash. Ici, lors de l'association avec la colonne item, définissons-la fermement comme category_id ou prefecture_id.
Au contraire, lors de la formation d'une association avec un modèle, Cela ressemble à appartient_to_active_hash: catégorie, et vous n'avez pas besoin d'écrire _id.
Le code est résumé ci-dessous, j'espère donc que vous le comprenez ici.
models/item.rb
---réduction---
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
---réduction---
ruby:views/edit.html.erb
<div class="items-detail">
<div class="weight-bold-text">Détails du produit</div>
<div class="form">
<div class="weight-bold-text">
Catégorie
<span class="indispensable">Obligatoire</span>
</div>
<%= f.collection_select(:category_id, Category.all, :id, :name, {}, {class:"select-box", id:"item-category"}) %>
<div class="weight-bold-text">
État du produit
<span class="indispensable">Obligatoire</span>
</div>
<%= f.collection_select(:condition_id, Condition.all, :id, :name, {}, {class:"select-box", id:"item-sales-status"}) %>
</div>
</div>
Le fichier de migration est le suivant. Veuillez noter que le nom de la colonne a _id.
○○_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
J'étais submergé sans me rendre compte que le nom de la colonne devait avoir _id. Vous pouvez bien comprendre cette théorie en jouant avec la console, mais j'espère que cela aidera le même débutant qui n'est toujours pas bon en résolution d'erreur et qui est en difficulté.
Recommended Posts