未定义的方法`fields_for'用于#<mymodel:0xc2f8da0> </mymodel:0xc2f8da0>

时间:2011-12-15 14:25:47

标签: ruby-on-rails ruby-on-rails-3

我的模型中有3级层次结构,例如

发布商[有很多] - &gt;作者[有很多] - &gt;书

以我的形式, 我有以下结构

<%= form_for(@publisher) do |p| %> 
    ...
  <%= p.fields_for @publisher.authors.build, :authors do |a| %>
     ...
    <%= a.fields_for a.books.build, :books do |b| %>
      ...
    <% end %> 
  <% end %> 
<% end %> 

它会抛出以下错误

undefined method `fields_for' for #<Author:0xc2f8da0>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

问题只是你试图在fields_for类的实例(这是一个模型)上调用Author。该方法未在模型上定义,它是ActionView的一部分辅助方法。

尝试简单地删除a.并执行:

<%= fields_for a.books.build, :books do |b| %>
  ...
<% end %> 

the documentation中有更多示例。这可能不是您的情况的完整答案,但任何时候你得到undefined method错误,问题是非常直接的 - 你正在调用范围或对象中不存在的方法在你打电话的时候。通常会发生这种情况,因为您认为自己正在处理类x的对象,但实际上您已经有了y课,而您却没有意识到这一点。