0

我有几个对象,foo、bar 和 user。

我有一个用于创建新的 foo 对象的表单,它使用 simple_fields_for 和 accept_nested_attributes_for 同时创建一个新的子栏对象。

现在,我想将 current_user 设置为新栏的作者属性,但我不知道如何最好地做到这一点。(仍然是 Rails 的新手。)

我在 foo 控制器的 create 方法中尝试了以下操作:

def create
    @foo = Foo.build(params[:foo])

    @foo.bars.find(:first).author = current_user

但是,当我运行它时,我得到了一个例外。

undefined method `author=' for nil:NilClass

任何人都可以就如何最好地解决这个问题提供任何建议吗?

4

1 回答 1

0

您可能需要Bar@foo. IE

def new
  @foo = Foo.new
  @foo.bars.build
end

def create
   @foo = Foo.new(params[:foo])
   @foo.bars.first.author = current_user
   if @foo.save 
     redirect_to @foo
   else
     render action: "new"
   end
end

嵌套表单的好资源:http ://railscasts.com/episodes/196-nested-model-form-part-1?view=asciicast

如果您在模型中设置了accepts_nested_attributes_for 并fields_for在表单中正确使用,params[:foo]将包含一个名为的元素,该元素bar_attributes将包含在表单中输入的关于 bar 对象的数据。查看我链接到的铁路广播以获取更多信息。

于 2012-11-16T16:41:48.067 回答