build_association工作?

时间:2011-09-27 12:29:00

标签: ruby-on-rails activerecord

我有两个模型,一对一关联。

class User < ActiveRecord::Base
  has_one  :setting
end

class Setting < ActiveRecord::Base
  belongs_to :user
end

每个模型都有很多字段,用户非常广泛地使用非rails外部服务器,这就是我将表分开的原因。

我正在尝试使用build_association,但我得到的是nil的未定义方法`build_setting':NilClass。我想这样做是因为我想要一个包含两个模型中的字段的表单来设置新用户。

在我的用户控制器新方法中,我试试这个:

def new
  @user = User.new
  @setting = @user.setting.build_setting

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @user }
  end
end

引发:

NoMethodError in UsersController#new
  undefined method `build_setting' for nil:NilClass

为什么呢?根据api文档,这是实现它的方法。

这样做似乎有效,但它不是正确的方式(或者是它?):

def new
  @user = User.new
  @setting = Setting.new
  @user.setting=@setting

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @user }
  end
end

2 个答案:

答案 0 :(得分:2)

您需要使用:

@setting = @user.build_setting

这是在编辑之后,所以如果您喜欢这个答案,请接受下面的Mahesh。

答案 1 :(得分:1)

在您的用户模型中添加

class User < ActiveRecord::Base
  has_one  :setting
  validates_associated :setting
end

然后使用

@setting = @user.build_setting