“未定义的方法`enumerable_enumerator_path'”错误

Posted

技术标签:

【中文标题】“未定义的方法`enumerable_enumerator_path\'”错误【英文标题】:" undefined method `enumerable_enumerator_path' " error“未定义的方法`enumerable_enumerator_path'”错误 【发布时间】:2011-04-25 17:17:04 【问题描述】:

我正在使用基本的脚手架结构。我需要的是通过将published 更改为true 来添加“适度”操作和视图。在我的想法中,在moderate.html 上,我应该获得所有未发布条目的列表,并且能够更改和保存它们的参数。 以下是我的部分代码:

 #names_controller.rb
 def moderate
 @name = Name.find(:all, :conditions => :published => false )
   respond_to do |format|
      format.html 
      format.xml  
     end
 end

#moderate.html.erb
<% form_for @name.each do |f| %>
  <%= f.error_messages %>
    <%= f.text_field :which %>  
    <%= f.text_field :what %>
    <%= f.check_box :published %>
    <%= f.submit %>
  </p>
<% end %>

相反,我收到了这个错误:

NoMethodError in Names#moderate

Showing app/views/names/moderate.html.erb where line #1 raised:

undefined method `enumerable_enumerator_path' for #<ActionView::Base:0x1042c3e90>
Extracted source (around line #1)
 

那么,你能帮助新手吗?

ruby 1.8.7(2009-06-12 补丁级别 174)

[universal-darwin10.0] Rails 2.3.5

【问题讨论】:

您的问题是因为您将@name.each 作为 form_for 中的变量传递,但我不确定解决方案。您是否尝试一次编辑多个记录? 是的,我是。我需要一份所有“未发表”记录的清单。问题肯定是'form_for'和'.each'的组合,但不知道任何解决方案。 【参考方案1】:

如果您想以单独的形式更新每个名称,那么您只需将循环移动到form_for 上方:

<% @name.each do |n| %>
  <% form_for n do |f| %>
    <%= f.error_messages %>
    <%= f.text_field :which %>  
    <%= f.text_field :what %>
    <%= f.check_box :published %>
    <%= f.submit %>
   </p>
  <% end %>
<% end %>

但是,如果您想在一个提交(单个表单)中完成所有操作,那么我想您不能使用form_for。我会使用form_tag 创建一个自定义表单来更新多个实例。这应该适用于创建和编辑表单:

<%= form_tag moderate_names_path do %>  
  <% @names.each do |name| %>
    <fieldset>
    <%= fields_for "name[#name.id]", name do |name_fields| %>
      <p><%=name_fields.label(:this)%>: <br /><%= name_fields.text_field :this %></p>
      <p><%=name_fields.label(:that)%>: <br /><%= name_fields.text_field :that %></p>
      <p><%= name_fields.check_box :published %> <%=name_fields.label(:published)%></p>
    <% end %>
    </fieldset>
    <br />
  <% end %>  
  <%= submit_tag %>
<% end %>

注意:我在第二个示例中将 @name 更改为 @names

【讨论】:

谢谢回答!第一个例子效果很好,但似乎我需要第二个例子,那就是我得到错误:'SyntaxError in Names#moderate Showing app/views/names/moderate.html.erb where line #1 raise: compile error' 好的,我已经将 'form_tag' 和 'fields_for' 标签中的 更改为 ,现在它可以工作了。再次感谢。 是的,很抱歉 - 我使用我的 Rails 3 环境编写此示例。 最后一个问题:我应该在哪里定义'put'方法来保存记录中的变化? 您需要将moderate 路由添加到您的名称模型中,然后在您的NamesController 中定义一个具有相同名称的方法。或者,如果您询问在哪里设置表单方法,form_tag 助手接受 :method =&gt; :put 选项。

以上是关于“未定义的方法`enumerable_enumerator_path'”错误的主要内容,如果未能解决你的问题,请参考以下文章