rails中的一对多嵌套属性

时间:2011-03-02 08:57:28

标签: ruby-on-rails nested-attributes nomethoderror

这不是一个问题,但希望有人可以从中受益。

当您尝试创建或修改一对多嵌套关联时,请确保传递数组。 如果你正在

  

NoMethodError(未定义的方法`[]'for ...

并且您正在使用一对多嵌套关联,这可能是您的问题。 在搜索此错误时我没有找到解释,所以这可能有助于加快其他人的发展。

例如,我有一个带

的Person模型
has_many :person_images
accepts_nested_attributes_for :person_images

为了创建新人和相关的person_image,我会执行以下操作。

@person = Person.create(:full_name=>@person_name, :person_images_attributes=>[{:image=>person_image}])

注意{:image => person_image}周围的[]。如果你有一对多你必须有这个。所以以下方法不起作用并产生未定义的方法'[]'错误。

@person = Person.create(:full_name=>@person_name, :person_images_attributes=>{:image=>person_image})

另外,在我的观点中,我必须像这样命名我的输入

<input type="file" name="person[person_images_attributes][0][image]">

没有[0]它不起作用。

我是Rails的新手。我希望这有助于其他初学者,如果有人有更好的解释或更有效的方式来做到这一点,我将非常感谢你的评论。

有关详细信息,请参阅 Rails API on Nested Attributes

1 个答案:

答案 0 :(得分:0)

使用formtastic创建表单,它将处理你写的那些[0]事情。

见这里:

http://railscasts.com/episodes/184-formtastic-part-1 http://railscasts.com/episodes/185-formtastic-part-2

如果您是RoR的新手,那些非常适合学习的网站。

http://railscasts.com http://guides.rubyonrails.org/

顺便说一句,在我看来你在Person模型中几乎没有扭曲的关系。 你可能用过

has_many :person_images

但你使用[0]来获得第一个。