0

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

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

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 上的嵌套属性

4

1 回答 1

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] 来获得第一个。

于 2011-03-02T09:50:38.967 回答