这不是一个问题,但希望有人可以从中受益。
当您尝试创建或修改一对多嵌套关联时,请确保传递数组。 如果你正在
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
答案 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]来获得第一个。