¿Por qué obtengo "puede tener rutas ambiguas" para una acción de controlador de rieles?

Tengo problemas con una forma semántica de uno de mis modelos. Los modelos correspondientes son

class Event < ActiveRecord::Base
  belongs_to :series
  ...
end

class Series < ActiveRecord::Base
  has_many :events
  ...
end

Cuando visito /series/new en un navegador, me sale el error:

 series_url failed to generate from {:controller=>"series", :action=>"show"} - you may have ambiguous routes, or you may need to supply additional parameters for this route.  content_url has the following required parameters: ["series", :id] - are they all satisfied?

EDITAR: he corrido rake routes | grep series | grep new para buscar rutas conflictivas, y no hay ninguna, aquí está el resultado:

new_series_event GET /series/:series_id/events/new(.:format) {:controller=>"events", :action=>"new"} 
new_series       GET /series/new(.:format) {:controller=>"series", :action=>"new"}

La plantilla correspondiente a la /series/new hace el siguiente parcial:

<% semantic_form_for(@series) do |f| %>
  <%= f.error_messages %>
  <% f.inputs do %>
    <%= f.input :title %>
    <%= f.input :uri, :label => "URL of the Series", :hint => "For example, use 'tes' for 'Transportation Education Series'. It will appear as http://events.kittelson.com/tes"    <%= f.input :description %>
    <%= f.input :contact, :label => "Contact email" %>
    <%= f.input :color, :label => "Pick a dark color" %>
  <% end %>
  <% f.buttons do %>
    <%= f.commit_button %>
    <%= link_to "or cancel", :back %>
  <% end %>
<% end %>

Donde el @series objeto se define en el controlador como Series.new.

Lo que no entiendo es cómo se relaciona esto con el enrutamiento, ejecuté rake routes y solo hay una acción de controlador asignada a /series/new.

Aquí está la parte de config/routes.rb que se relaciona con estos modelos:

ActionController::Routing::Routes.draw do |map|
  map.resources :series, :has_many => :events
  map.resources :events, :has_many  => :rsvps
end

¿Qué podría estar causando este error de enrutamiento?

preguntado el 28 de julio de 12 a las 01:07

¿Has ejecutado algo como rake routes | grep series | grep new para buscar rutas conflictivas? -

Sí, no hay rutas en conflicto: new_series_event GET /series/:series_id/events/new(.:format) {:controller=>"events", :action=>"new"} new_series GET /series/new(.:format) {:controller=>"series", :action=>"new"} -

He agregado la información a la pregunta, está cerca del principio, en "EDITAR". -

1 Respuestas

Sólo una corazonada. Puede que estés confundiendo el inflector de Rail. tal vez debería ser belongs_to serial en lugar de belongs_to series?

Verás, normalmente escribiríamos belongs_to user más bien que users. Así que es posible que desee probar eso.

Respondido 28 Jul 12, 04:07

Buena idea, pero eso no es todo, el deflector asigna "serial" a "serials" y "series" a "series" como plurales. - caballero

En realidad, tu corazonada era correcta. Este artículo sugirió usar el :singular opción en config.routes para cambiar hacer que la versión singular sea una palabra distinta. Eso funcionó, eliminó el error de 'rutas ambiguas'. - caballero

¡Hurra! No sabía acerca de la opción singular antes. ¡Gracias! - Benjamín Tan Wei Hao

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.