2010-08-18 5 views
0

J'ai un modèle: nouveau et son contrôleur: nouvellesl'action Ruby mise à jour ne fonctionne pas

Les méthodes de régulation de nouvelles:

def edit 
    @new = New.find(params[:id].to_i) 
    end 

    def update 
    @new = New.find(params[:id].to_i) 
    @new.update_attributes(params[:new]) 
    flash[:notice] = "Sikeresen frissítve" 
    redirect_to news_path 
    rescue ActiveRecord::RecordInvalid 
    flash[:error] = "Valami hiba lépett fel" 
    redirect_to edit_news_path(@new) 
    end 

Et voici le edit.html.erb

<%= error_messages_for :news %> 

<% form_for :new, :url=>news_path(@new), :html=>{:method=>:put} do |m|%> 

    <p> <%= m.label(:title,"title: ") %> 

    <%= m.text_field(:title) %></p> 

    <p> 

    <%= m.label(:text, "text: ") %> 

    <%= m.text_area(:text) %> 

    </p> 

    <%= submit_tag "Save" %> 

<% end %> 

Cela fonctionne très bien, pas d'erreur, le champ est apparu dans les zones de texte, mais si je clique sur le bouton soumettre j'ai donné une erreur d'action inconnue

Répondre

3

Je pense qu'il devrait être

: url => new_path (@new)

pas

: url => news_path (@new)

bien que je suis confus juste en pensant à cause de vous appeler votre modèle "nouveau".

Je vous recommande fortement de changer le nom de votre modèle (et le contrôleur et les vues) pour éviter toute confusion. "Nouveau" est utilisé dans les rails dans le contexte de la "nouvelle" action. Si vous ne le changez pas, vous aurez des choses comme "new_new_path" et "update_new_path" qui vont vous faire pleurer à un moment donné.

En outre, il n'est pas vraiment logique de parler de «nouveau». Le singulier de «nouvelles» n'est pas «nouveau». Il est très déroutant à tous les égards, le trier maintenant avant de construire d'autres choses autour de lui.

Je recommanderais "Article" ou quelque chose de similaire en tant que nom de modèle.

+0

Si l'OP veut conserver les nouvelles comme nom de contrôleur, il pourrait changer l'inflecteur pour rendre les "nouvelles" innombrables –

0

Essayez ceci:

form_for :new, :url=>{ :action => "update" }, :html=>{:method=>:put} do |m| 
Questions connexes