如何在不保存(更新)基础对象的情况下仅保存(插入)关联对象?
例如我只想保存电话号码,我不想重新保存/更新人物对象。
def create_numbers
#params => person_id => 41, person => {:phone_number => '12343445, 1234566, 234886'}
@person = params[:person_id]
nums = params[:person][:phone_numbers].split(',')
nums.each do |num|
@person.phone_numbers.build(:number => num)
end
@person.save #here I just want to save the numbers, I don't want to save the person. It has read only attributes
end
型号:
Person < ...
# id, name
belongs_to :school, :class_name => :facility
has_many :phone_numbers
end
PhoneNumber < ...
# id, number
belongs_to :person
end
这是一个愚蠢的例子,但它说明了我正在努力实现的目标
答案 0 :(得分:2)
@person.phone_numbers.create(:number => num)
缺点是你不知道它是否失败 - 你可以处理它,但这取决于你想要处理它的确切程度。
答案 1 :(得分:1)
最简单的方法是将build(:number => num)
替换为create(:number => num)
,这将立即构建并保存phone_number对象(假设它通过了验证)。
如果您需要在创建整个集合后保存所有内容(由于某种原因),您可以执行类似
的操作@person.phone_numbers.each{|num| num.save}