2010-10-15 2 views
0

Я использую базовую структуру лесов. Что мне нужно, это добавить «умеренное» действие и просмотр, изменив published на true. В моей идее, на medium.html, я должен получить список всех неопубликованных записей с возможностью изменения и сохранения их параметров. Вот часть моего кода:"undefined method" enumerable_enumerator_path "" error

#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 patchlevel 174)

[universal-darwin10.0] Rails 2.3.5

+0

Вашей проблемы в том, что вы передаете @ name.each как переменные в form_for, но я не уверен в решении. Вы пытаетесь редактировать сразу несколько записей? –

+0

Да, я. Мне нужен список всех «неопубликованных» записей. Проблема определенно в комбинации «form_for» и «.each», но не знает никакого решения. – Maay

ответ

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 %> 

Но если вы хотите, чтобы сделать все это в один submit (одна форма), то я думаю, вы не можете использовать 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 во втором примере

+0

Thx для ответа! Первый пример работает хорошо, но мне кажется, что мне нужен второй, и я получаю ошибку: «SyntaxError in Names # умеренный Отображение app/views/names/medium.html.erb, где строка # 1 поднята: ошибка компиляции ' – Maay

+0

Хорошо, я изменил <%= %> на <% %> в тегах' form_tag 'и' fields_for ', и теперь он работает. Thx снова. – Maay

+0

Да, извините, я использовал среду Rails 3 для кодирования этого примера. – Matt