2010-10-15 16 views
0

J'utilise une structure d'échafaudage de base. Ce dont j'ai besoin, c'est d'ajouter une action «modérée» et de visualiser en changeant published en true. Dans mon idée, sur moderate.html je devrais obtenir la liste de toutes les entrées non publiées avec la possibilité de changer et enregistrer leurs paramètres. Voici les parties de mon code:"méthode indéfinie` enumerable_enumerator_path '"erreur

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

Au lieu de cela, je reçois cette erreur:

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) 

Alors, peut vous aider à newbie s'il vous plaît?

ruby 1.8.7 (2009-06-12 patchlevel 174)

[universal-darwin10.0] Rails 2.3.5

+0

Votre problème est que vous passez @ name.each comme variable dans le form_for, mais je ne suis pas sûr de la solution. Essayez-vous de modifier plus d'un enregistrement à la fois? –

+0

Oui, je suis. J'ai besoin d'une liste de tous les enregistrements 'non publiés'. Le problème est certainement en combinaison de 'form_for' et '.each', mais ne connaît pas de solution. – Maay

Répondre

1

Si vous souhaitez mettre à jour chaque nom sous une forme séparée, tout ce que vous devez faire est de déplacer la boucle au-dessus 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 %> 

Mais si vous voulez tout faire en un soumettre (un seul formulaire) alors je suppose que vous ne pouvez pas utiliser form_for. J'utiliserais form_tag pour créer un formulaire personnalisé pour mettre à jour plusieurs instances. Cela devrait fonctionner à la fois pour créer et modifier la forme de:

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

AVIS: J'ai changé @name-@names dans le second exemple

+0

Thx pour la réponse! Le premier exemple fonctionne bien, mais il semble que j'ai besoin du second et que j'ai eu une erreur: 'SyntaxError dans les noms # modéré Affichage de l'app/views/names/moderate.html.erb où la ligne # 1 a été soulevée: erreur de compilation ' – Maay

+0

Ok, j'ai changé <%= %> en <% %> dans les balises' form_tag 'et' fields_for 'et maintenant ça marche. Thx à nouveau. – Maay

+0

Ouais, désolé à ce sujet - J'ai utilisé mon environnement Rails 3 pour coder cet exemple. – Matt