批量分配,嵌套表单和当前用户作为作者

时间:2012-11-16 16:33:37

标签: ruby-on-rails nested-attributes fields-for

我有几个对象,foo,bar和用户。

我有一个用于创建新foo对象的表单,它使用simple_fields_for和accepts_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

任何人都可以就如何最好地提出任何建议吗?

1 个答案:

答案 0 :(得分:0)

您可能需要在Bar下构建@foo对象。即

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的元素,该元素将包含有关条形对象的表单中输入的数据。查看我链接到的铁路广播以获取更多信息。