我有几个对象,foo,bar和user。
我有一个用于创建新的 foo 对象的表单,它使用 simple_fields_for 和 accepts_nested_attributes_for 同时创建新的子 bar 对象。
现在,我想将current_user设置为新柱的 author 属性,但我不知道如何最好地做到这一点。(对 Rails 来说仍然是新的。
我已经在foo控制器内的创建方法中尝试了以下内容:
def create
@foo = Foo.build(params[:foo])
@foo.bars.find(:first).author = current_user
但是,当我运行它时,我得到一个异常。
undefined method `author=' for nil:NilClass
任何人都可以就如何最好地做到这一点提供任何建议吗?
您可能需要在@foo
下构建Bar
对象。
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
的元素,该元素将包含在表单上输入的有关条形图对象的数据。浏览我链接到的铁路广播以获取更多信息。