2011-03-02 41 views
0

这不是问题,但希望有人能从中受益。轨道中的一对多嵌套属性

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

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

和你有一个一对多的嵌套的关联,这可能是你的问题的工作。 寻找这个错误时,那么也许这将有助于加快别人的发展中,我没有找到对此的解释。

例如,我有

has_many :person_images 
accepts_nested_attributes_for :person_images 
一个Person模型

为了创建一个新人和关联的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

这只是令人困惑,我需要阅读所有这些笔记发现你在这里没有任何问题。 – m4risU 2011-03-02 09:44:36

+0

谢谢m4risU。已编辑清楚。 – NAD 2011-03-04 10:21:18

回答

0

使用formtastic创建窗体,它会处理那些你写的[0]的东西。

在这里看到:

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

,如果你是新来的回报率是非常好的网站学习的榜样。

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

顺便说一句,在我看来,你必须在Person模型有点扭曲的关系。 您可能已使用

has_many :person_images 

但您使用[0]获取第一个。