Bagaimana Anda mengedit atribut model gabungan saat menggunakan accepts_nested_attributes_for?
Saya memiliki 3 model: Topik dan Artikel bergabung dengan Linker
class Topic < ActiveRecord::Base
has_many :linkers
has_many :articles, :through => :linkers, :foreign_key => :article_id
accepts_nested_attributes_for :articles
end
class Article < ActiveRecord::Base
has_many :linkers
has_many :topics, :through => :linkers, :foreign_key => :topic_id
end
class Linker < ActiveRecord::Base
#this is the join model, has extra attributes like "relevance"
belongs_to :topic
belongs_to :article
end
Jadi, ketika saya membuat artikel di tindakan "baru" dari pengontrol topik ...
@topic.articles.build
... dan buat formulir bersarang di topics / new.html.erb ...
<% form_for(@topic) do |topic_form| %>
...fields...
<% topic_form.fields_for :articles do |article_form| %>
...fields...
... Rails secara otomatis membuat linker, yang sangat bagus. Sekarang untuk pertanyaan saya: Model Linker saya juga memiliki atribut yang ingin saya ubah melalui formulir "topik baru". Tetapi linker yang dibuat secara otomatis oleh Rails memiliki nilai nihil untuk semua atributnya kecuali topic_id dan article_id. Bagaimana cara meletakkan bidang untuk atribut penaut lainnya ke dalam formulir "topik baru" agar tidak nihil?
ruby-on-rails
join
nested
nested-forms
Arcolye
sumber
sumber
User
melaluiAccount
menggunakan aRelationship
sebagailinker
... tetapi saya tidak tahu seperti apa tindakan baru dan buat yang dimaksud ... maukah Anda?Jawaban:
Menemukan jawabannya. Triknya adalah:
Itu membangun penaut, lalu membuat artikel untuk setiap penaut. Jadi, dalam model:
topic.rb membutuhkan kebutuhan
accepts_nested_attributes_for :linkers
linker.rb
accepts_nested_attributes_for :article
Kemudian di bentuk:
sumber
Ketika formulir yang dihasilkan oleh Rails dikirimkan ke Rails
controller#action
,params
akan memiliki struktur yang mirip dengan ini (beberapa atribut dibuat ditambahkan):Perhatikan bagaimana
linkers_attributes
sebenarnya indeks nolHash
denganString
kunci, dan bukanArray
? Nah, ini karena kunci bidang formulir yang dikirim ke server terlihat seperti ini:Membuat record sekarang sesederhana:
sumber
accepts_nested_attributes_for
GOTCHA cepat saat menggunakan has_one dalam solusi Anda. Saya hanya akan menyalin dan menempel jawaban yang diberikan oleh pengguna KandadaBoggu di utas ini .
Tanda
build
tangan metode berbeda untuk asosiasihas_one
danhas_many
.Sintaks build untuk
has_many
pengaitan:Sintaks build untuk
has_one
pengaitan:Baca dokumentasi
has_one
asosiasi untuk lebih jelasnya.sumber