我有几个对象,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
任何人都可以就如何最好地提出任何建议吗?
答案 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
的元素,该元素将包含有关条形对象的表单中输入的数据。查看我链接到的铁路广播以获取更多信息。