2010-12-28 2 views
0

Ich Rails 3 und Ruby 1.9eine get URL in routes.rb Datei Customizing gibt nicht definierte Methode {Symbol} _path

mit Ich versuche, eine benutzerdefinierte URL für eine Ressource zu erstellen, die ich BasicQuery nennen , aber ich denke, meine routes.rb Datei wird nicht korrekt geschrieben. Details unten.

Aus Gründen der Einfachheit BasicQuery kommt in zwei Varianten (a oder b)

Ich möchte die URL für BasicQuery auf 2 Arten anpassen:

  • ich die URL möchten Geben Sie an, welcher "Geschmack" der Basisabfrage angefordert wird (a oder b)
  • Der Controller für BasicQuery heißt basic_queries_controller, aber ich möchte, dass die URL (zumindest für mich) intuitiver ist und ich möchte Haben Sie den "Präfix" Teil der URL sein "basic_query" anstelle von "basic_queries"

Also, wenn ich ein neues BasicQuery Geschmack "a" schaffen werde, meine get URL wäre:

http://localhost:3000/basic_query/a 

Wenn ich schon einen neuen BasicQuery Geschmack "b" erstellen meine get URL wäre:

http://localhost:3000/basic_query/b 

meine routes.rb Dateieintrag wie folgt aussieht:

get "basic_query/:flavor" => "basic_queries#new" 

meine basic_queries_controller.rb Datei wie folgt aussieht:

def new 
    @basic_query = BasicQuery.new(flavor: params[:flavor]) 
    end 

meiner Sicht (new.html.haml) sieht wie folgt aus:

= form_for(@basic_query) do |f| 
    .field 
    = f.label :search_term 
    %br 
    = f.text_field :search_term 
    %br 
    = f.hidden_field :flavor 
    .actions 
    = f.submit 

Wenn jedoch bitte ich die folgende URL: http://localhost:3000/a, I erhalten den folgenden Fehler:

undefined method `basic_queries_path' for #<#<Class:0x0000010294f068>:0x0000010290eb58> 

= form_for(@basic_query) do |f| # <= this is the problematic line! 
    .field 
    = f.label :search_term 
    %br 

Also gehe ich davon meine routes.rb Datei definiert nicht richtig die basic_queries_path, aber ich bin mir nicht sicher, wie ich das machen soll.

Gedanken?

Danke!

+0

Können Sie bitte Ihre 'routes.rb' posten? – vonconrad

Antwort

2

verwenden form_for, müssen Sie eine Methode „POST“ definieren, dass das Formular an, im Moment einreichen können Sie nur ein GET zum Rückführen der Form einrichten, die Sie dann in füllen.

in Ihrer routes.rb Datei benötigen Sie so etwas wie dies zu tun:

post "/basic_query", :as => "basic_queries"

oder

match "/basic_query", :to => "basic_queries#create", :via => :post, :as => "basic_queries"

Das sollte es tun.

+0

Danke. Das funktioniert. – user141146

Verwandte Themen