2012-03-24 10 views
2

Als ich den Weg gehen: /genre/new in meiner Anwendung bekomme ich diesen Fehler:Rails 3 - form_for Pluralisierung verursacht Pfad/Methodenfehler auf „neue“ Aktion aber nicht auf „Bearbeiten“

myapp/app/views/genre/_form.html.erb where line #1 raised: 
undefined method `genres_path' for #<#<Class:0x007fdcb39edcb0>:0x007fdcb39e8080> 

Jedoch, wenn ich Gehe zu/genre /: id/edit Die Datei _form.html.erb wird ohne Fehler gerendert und der Datensatz wird ohne Probleme aktualisiert.

Meine new.html.erb und edit.html.erb Dateien rufen <%= render 'form' %> und meine _form.html.erb Datei hat:

<%= form_for(@genre) do |f| %> 
    <%= f.label :title %> <br /> <%= f.text_field :title %> 
    <%= f.label :desc %> <br /> <%= f.text_field :desc %> 
    <%= f.submit %> 
<% end %> 

In genre_controller.rb meinen 'neuen' und 'Bearbeiten' Aktionen sind wie folgt:

def new 
    @genre = Genre.new 
    current_user.authorize! :create, @genre # cancan authorization 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @genre } 
    end 
    end 

    def edit 
    @genre = Genre.find(params[:id]) 
    current_user.authorize! :update, @genre # cancan authorization 
    end 

I‘ Ich habe eine Suche in meiner Codebase nach der Zeichenfolge "genres" durchgeführt und der einzige Ort, an dem es auftritt, ist in den Protokollen, also bin ich mir sicher, dass dies kein Tippfehler in meinem Code ist.

Meine Vermutung ist, dass Rails Routing-System korrekt "Genre" zu "Genre" pluralisiert, aber Form_for (oder eine Abhängigkeit) erstellt die Pluralisierung "Genres", aber nur, wenn der Parameter leer oder "neu" ist .

der Fehler Gegeben ist um ‚genres_path‘, ich verschiedene Kombinationen der folgenden in meiner routes.rb Datei versucht, aber sie haben nicht das Problem lösen:

match "/genres" => "genre#index", :as => :genre 
    match "/genres/:id(.:format)" => "genre#show", :as => :genre 
    match "/genre" => "genre#index", :as => :genres 
    match "/genre/:id(.:format)" => "genre#show", :as => :genres 

Irgendwelche Gedanken darüber, wie ich arbeiten kann um das herum?

EDIT: Hier sind die von der resources :genre Anweisung in meiner routes.rb Datei erzeugt Routen:

genre_index GET /genre(.:format)   {:action=>"index", :controller=>"genre"} 
      POST /genre(.:format)   {:action=>"create", :controller=>"genre"} 
    new_genre GET /genre/new(.:format)  {:action=>"new", :controller=>"genre"} 
edit_genre GET /genre/:id/edit(.:format) {:action=>"edit", :controller=>"genre"} 
     genre GET /genre/:id(.:format)  {:action=>"show", :controller=>"genre"} 
      PUT /genre/:id(.:format)  {:action=>"update", :controller=>"genre"} 
      DELETE /genre/:id(.:format)  {:action=>"destroy", :controller=>"genre"} 

Antwort

3

auf new.html.erb versuchen

<%= form_for(@genre, :url => genre_path, :method => :post) do |f| %> 

vorausgesetzt, Sie Ihre Route Setup als Ressource - resources :genre

auch dies funktioniert nicht auf edit.html.erb

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

Update:

das ist das, was wir interessiert sind, in

POST /genre(.:format)   {:action=>"create", :controller=>"genre"} 

versuchen, diese

<%= form_for(@genre, :url => {:action=>"create", :controller=>"genre"}, :method => :post) do |f| %> 
+0

Dank für die Idee. Ich habe es versucht und es führt zu einem anderen Fehler: Keine Route stimmt überein {: action => "show",: controller => "genre"}. Aber das ist ein falscher Fehler - ich habe einen solchen Weg. Wenn ich "Rake-Routen" starte, bekomme ich: Genre GET /genre/:id(.:format) {: action => "show",: controller => "genre"} Die genaue Route der Fehlermeldung sagen, dass ich vermisse . Irgendeine Idee, was das verursacht? –

+1

können Sie die Ausgabe von Rake-Routen für alle Genre-Routen hinzufügen - siehe auch aktualisierte Antwort - geben Sie die Methode als Put oder Post – house9

+0

Siehe meine Routen in der Frage, am unteren Rand. Versuchte beide: put und: post als: Methoden - gleiche Fehler wie zuvor ("keine Route passt ...") Auch, versuchte ein paar Dinge, die ich in den Dokumenten sah, aber keinen Erfolg. Das hat mich wirklich ratlos gemacht.Schätze deine Hilfe. –

Verwandte Themen