如何更新模型对象的关联对象?

时间:2009-08-20 07:06:04

标签: ruby-on-rails activerecord associations

我想要以下内容:

@user.update_attributes(:name => "Obama", :profile => { :current_location => 'US' })

用户has_one个人资料。

2 个答案:

答案 0 :(得分:7)

将它们设为'嵌套属性'。 The documentation说:

考虑具有一个头像的会员模型:

  class Member < ActiveRecord::Base
    has_one :avatar
    accepts_nested_attributes_for :avatar
  end

...

允许您通过会员更新头像:

  params = { :member' => { :avatar_attributes => { :id => '2', :icon => 'sad' } } }
  member.update_attributes params['member']
  member.avatar.icon # => 'sad'

答案 1 :(得分:1)

正如bjelli所说,这是你可能想要的accepts_nested_attributes_for方法。重要的是要注意它是传递profile的:id属性,它允许它识别它是你要执行的更新。

我建议您阅读nested_attributes.rb条评论以了解更多信息:)