2012-01-03 9 views
29

estoy corriendo en un (creo) error de encaminamiento durante el uso de los rieles form_for ayudante. He estado buscando alrededor y miraba this question, pero el plural de "static_event" con pluralizar es "static_events" así que estoy en una pérdida. Cualquier ayuda sería apreciada. Aquí están los detalles ....método Indefinido con "_PATH" durante el uso de los carriles form_for

ActionView::Template::Error (undefined method `static_events_path' for #<#<Class:0x007f9fcc48a918>:0x007f9fcc46fa78>): 

Mi Modelo:

class StaticEvent < ActiveRecord::Base 
attr_accessible :content, :title, :discount, :location, :day_of_week, :start_time 

Mi controlador:

class StaticEventsController < ApplicationController 

    before_filter :authenticate, :only => [:create, :destroy] 
    before_filter :authorized_user, :only => [:destroy] 


    def new 
    @title = "Share An Event" 
    @static_event = StaticEvent.new 
    end 

    def create 
    @static_event = current_user.static_events.build(params[:event]) 
    if @static_event.save 
     flash[:success] = "Event Shared" 
     redirect_to @static_event #this was the old version 
    else 
     render :new 
    end 
    end 

La ruta:

match '/static-events/new', :to => 'static_events#new' 
match '/static-events/',  :to => 'static_events#index' 
match '/static-events/:id', :to => 'static_events#show' 

La vista

<%= form_for (@static_event) do |f| %> 
<%= render 'shared/error_messages', :object => f.object %> 
<%= text_field "static_event", "title", "size" => 48 %> 
<%= time_select "static_event", "start_time", {:ampm => true, :minute_step => 15} %> 
<%= text_area "static_event", "content", "cols" => 42, "rows" => 5 %> 
<%= text_field "static_event", "discount", "size" => 48 %> 
<%= text_field "static_event", "location", "size" => 48 %> 
<%= text_field "static_event", "day_of_week", "size" => 48 %> 
<input name="" type="submit" class="button" value="share on chalkboard" /> 
<% end %> 

Respuesta

24

Sólo las rutas creadas utilizando el método resources se nombran de forma automática.

Si desea asignar nombres a las rutas, utilice la opción :as:

match '/static-events/new', :to => 'static_events#new', :as => :new_static_event 
match '/static-events/',  :to => 'static_events#index', :as => :static_events 
match '/static-events/:id', :to => 'static_events#show', :as => :static_event 

Sin embargo, es mejor usar el método resources. Debe pasar el "verdadero" nombre de su modelo como el primer parámetro, entonces anular el camino si quieres:

resources :static_events, :path => 'static-events' 
+0

Genial, lo he actualizado a esto. Gracias Fábio! – Alekx

+0

En rieles 4, deberá especificar también el método http con 'via' – courtsimas

+1

Como aspecto secundario, para las rutas anidadas deberá pasar un par de valores para' form_for ([@ static_event, @ sub_event]) ' –

3

Run rake routes y verá la lista de sus rutas. Luego puede arreglar el archivo de ruta para tener la ruta de ruta apropiada.

+0

Según lo que puedo ver, mis rutas son precisas. – Alekx

+0

Buena sugerencia de depuración: esto me ayudó. – infl3x

8

En primer lugar, debe definir sus rutas de esta manera:

resources 'static-events', :only => [:new, :create] 

Esto creará una ruta de nuevo y crear métodos.

Porque cuando utiliza un nuevo objeto ActiveRecord como argumento para formar, buscará * s_path como static_events_path en su archivo de rutas con el verbo POST.

Creo que la forma que tiene definidas las rutas no crea el static_events_path con verbo POST (se puede comprobar que mediante el uso de rutas rastrillo como dijeron megas). Así que ya no uses la coincidencia, utiliza recursos o obtén/publica/... en lugar de combinar en tus proyectos de Rails 3.

EDITAR

No me di cuenta ayer, pero no hay una ruta para crear método. Añadir a continuación la ruta antes índice static_events # o eliminar todas sus rutas y hacer como he dicho anteriormente.

post '/static-events/', :to => 'static_events#create' 
+0

': static-events' no es un símbolo válido –

+0

Utilicé: static_events y funcionó. – Alekx

+0

Tienes razón injekt, los símbolos no pueden contener guiones. Solucioné el error – basgys

1

Esto me sucedió cuando yo estaba usando un recurso anidado, pero se olvidó de inicializar en realidad el padre recurso usando load_and_authorize_resource en cancan. Por lo tanto, el recurso principal era nulo y arrojó este error.

Lo arreglé declarando load_and_authorize_resource en el elemento primario en el controlador.

Cuestiones relacionadas