Saya belum dapat menemukan dokumentasi apa pun tentang metode .build di Rails (saat ini saya menggunakan 2.0.2).
Melalui eksperimen, tampaknya Anda dapat menggunakan metode build untuk menambahkan catatan ke dalam suatu has_many
hubungan sebelum salah satu catatan disimpan.
Sebagai contoh:
class Dog < ActiveRecord::Base
has_many :tags
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :dogs
end
# rails c
d = Dog.new
d.tags.build(:number => "123456")
d.save # => true
Ini akan menyimpan anjing dan tag dengan kunci asing dengan benar. Ini sepertinya tidak berhasil dalam suatu belongs_to
hubungan.
d = Dog.new
d.person.build # => nil object on nil.build
Saya juga sudah mencoba
d = Dog.new
d.person = Person.new
d.save # => true
Kunci asing masuk Dog
tidak diatur dalam kasus ini karena fakta bahwa pada saat disimpan, orang baru tidak memiliki id karena belum disimpan.
Pertanyaan saya adalah:
Bagaimana cara membangun agar Rails cukup pintar untuk mengetahui cara menyimpan catatan dalam urutan yang benar?
Bagaimana saya bisa melakukan hal yang sama dalam suatu
belongs_to
hubungan?Di mana saya dapat menemukan dokumentasi tentang metode ini?
Terima kasih
sumber
belongs_to
" dan "Metode Ditambahkan olehhas_one
" . Lebih banyak dokumentasi teknis dapat ditemukan di dokumen API:belongs_to
andhas_one
.Jawaban:
Di mana itu didokumentasikan:
Dari dokumentasi API di bawah asosiasi has_many di " Module ActiveRecord :: Associations :: ClassMethods "
Jawaban untuk membangun di arah yang berlawanan adalah sintaks yang sedikit diubah. Dalam contoh Anda dengan anjing-anjing,
atau bahkan
Anda juga dapat menggunakan create_dog untuk menyimpannya secara instan (seperti metode "buat" yang sesuai yang dapat Anda panggil di koleksi)
Bagaimana rel cukup pintar? Ini sihir (atau lebih tepatnya, saya tidak tahu, akan senang mengetahuinya!)
sumber
find_by_email
danfind_by_column_name
metode. Ini mengonversi metode yang Anda berikan ke string dan membedahnya dan mencoba mencocokkannya dengan nama kolom tabel Anda.sumber