El uso de “news_path” para un: recurso de noticias no funciona con `No hay coincidencias de ruta {: acción =>“ mostrar ”,: controlador =>“ admin / news ”} faltan las claves necesarias: ‘

Estoy implementando un subdominio de administrador y he buscado en Google para intentar encontrar la respuesta a esto, sin embargo, no he encontrado otra instancia.

Mis rutas se ven así para la sección de subdominio:

constraints :subdomain => 'admin' do scope :module => "admin" do resources :news, :events match 'news', :to => 'news#index', :as => 'news' root :to => "dashboard#index" end end 

Los eventos funcionan bien, pero por alguna razón para que las noticias funcionen, necesito agregar una ruta específica para que coincida. Puede ayudar mostrar el parcial donde se genera el error (admin / shared / menu):

 
  • "#{current_class?(root_path)}" %>
  • "#{current_class?(news_path)}" %>
  • "#{current_class?(events_path)}" %>

Y luego el error si tuviera que eliminar la ruta de coincidencia:

 No route matches {:action=>"show", :controller=>"admin/news"} missing required keys: [:id] 

Simplemente no tengo ni idea de por qué, ¿algún pensamiento?

Descubrí que este es un problema con los Rails, ya que las noticias de la convención de nombres no deben usarse debido a problemas plurales, noticias -> nuevas, por lo tanto, tuve que cambiar el nombre de todo a artículos. La supervisión de mi parte, un poco estúpida.

La razón por la que Rails se confunde es porque las “noticias” se usan tanto en singular como en plural. news'.singularize da news ; y news.pluralize también da news ( Wikipedia tiene una descripción más larga de este fenómeno ; hay otras palabras que hacen lo mismo ).

Rails generará una ruta news_path (plural, para la acción de índice) y una ruta news_path (singular, para la acción show).
La ruta singular espera una instancia de News ; parece que la acción de show se define más adelante, y sobrescribe la acción de índice, lo que resulta en un comportamiento extraño.

La solución es simple: use la news_index_path si desea la acción de índice. No he encontrado ningún otro problema y todavía estoy usando el modelo de News .

ActiveAdmin solucionó este problema de la misma manera.

Si realmente no quieres usar News , entonces puedes usar el sufijo con Item , Entry , Object o una palabra similar. Esto te dejará con un modelo news_item_path con news_item_path y news_items_path .