RoR Как сделать более одной сборки Build в одном блоке без потери информации?
Сейчас я только начинаю небольшой проект, чтобы узнать больше о новых возможностях в RoR 3 . Поэтому я читал об ассоциациях между объектами, более конкретно о методе "сборки". Моя проблема, когда я использую его один раз, нет проблем, как:
@note = product.notes.build(:product => product)
а затем я изменяю некоторые атрибуты заметки и никаких проблем.
Проблема в примечании belongs_to
два объекта Product
а также User
поэтому, когда я создаю объект, мне нужно создать эту ассоциацию, поэтому мне нужно сделать что-то вроде
@note = product.notes.build(:product => product)
@note = user.notes.build(:user => user)
После второй сборки я потерял связь с Product, потому что метод "build" вернет новый экземпляр.
Я что-то упускаю из-за того, как я должен строить ассоциации? Должен ли я сделать это по-другому?
Спасибо!
# POST /notes
# POST /notes.xml
def create
user = current_user
product = Product.find(2)
@note = product.notes.build(:product => product)
@note = user.notes.build(:user => user)
@note.rating = params[:note][:rating]
@note.text = params[:note][:text]
respond_to do |format|
if @note.save
format.html { redirect_to(@note, :notice => 'Note was successfully created.') }
format.xml { render :xml => @note, :status => :created, :location => @note }
else
format.html { render :action => "new" }
format.xml { render :xml => @note.errors, :status => :unprocessable_entity }
end
end
end
Здесь идет определение продукта
class Product < ActiveRecord::Base
validates :name, :presence => true
has_many :notes ,:dependent => :destroy
end
и Примечание
class Note < ActiveRecord::Base
belongs_to :product
belongs_to :user
end
1 ответ
Выберите способ, который вы предпочитаете:
@note = Note.new(:user => user, :product => product)
@note = product.notes.build(:user => user)
@note = user.notes.build(:product => product)
Если вы напишите два @note =
Вы переназначаете другой объект на @note
и первый потерян.
Вы также можете написать что-то вроде этого:
@note = product.notes.build
@note.user = user