2011-03-13 107 views
3

I我正在實施一個管理子域名,並用Google搜索來找到答案,但我還沒有找到另一個實例。對於新聞資源使用「news_path」不適用於無路由匹配{:action =>「show」,:controller =>「admin/news」}缺少必需的密鑰:[:id]'

我的路線是這樣的子域部分:

constraints :subdomain => 'admin' do 
    scope :module => "admin" do 

    resources :news, :events 
    match 'news', :to => 'news#index', :as => 'news' 

    root :to => "dashboard#index" 
    end 
end 

活動工作正常,但由於某些原因,以便新聞工作,我需要添加一個特定路由到與之相匹配的。它可以幫助顯示部分產生錯誤的位置(管理/共享/菜單):

<ul> 
    <li><%= link_to 'Home', root_path, :class => "#{current_class?(root_path)}" %></li> 
    <li><%= link_to 'News', news_path, :class => "#{current_class?(news_path)}" %></li> 
    <li><%= link_to 'Events', events_path, :class => "#{current_class?(events_path)}" %></li> 
    <div class="clearboth"></div> 
</ul> 

然後是錯誤,如果我是刪除了比賽路線:

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

我只是不沒有線索爲什麼,有什麼想法?

回答

8

我發現這是一個與軌道問題,因爲命名約定新聞不應該使用,由於複雜的問題,新聞 - >新所以我不得不重新命名所有文章。對我來說,監督有點愚蠢。

+3

「* news - > new *」並不完全正確;你有沒有聽過有人說過「一篇有趣的新文章」;-)?問題是,在「新聞」的情況下,* * *單數*和*複數是同一個詞。你不需要重新命名'News',只需要使用'news_index_path'而不是'news_path'(另見[我的回答](http://stackoverflow.com/a/27678933/660921)) 。 – Carpetsmoker 2014-12-28 17:44:01

+0

感謝您的更新,對於其他誰知道他們可以使用它,如果需要的話很好。最後,我發現最好避免使用可能的複數問題來確保不僅我自己,而且項目中的其他人也不會嘗試使用類似的約定。有趣的是,文章變成了團隊和項目用戶羣的一個更優選的術語,所以這是一個方便的錯誤! – 2014-12-29 20:19:13

+0

太好了,解決了我的生活;) – 2015-04-21 20:45:44

3

Rails感到困惑的原因是因爲「新聞」用於單數和複數。 news'.singularize給出news;和news.pluralize也給出newsWikipedia has a longer description of this phenomenon;有other words that do the same)。

Rails將生成一個news_path路由(複數,用於索引操作)和一個news_path路由(單數,用於顯示操作)。
單數路線期望News實例;看來show動作是後面定義的,而會覆蓋的索引動作,導致奇怪的行爲。

解決方案很簡單:如果您需要索引操作,請使用news_index_path。我還沒有遇到任何其他問題,我仍然使用News模型。

ActiveAdmin fixed this issue以相同的方式。

如果你真的不想使用News,那麼你可以後綴Item,Entry,Object或類似的詞。這將爲您提供NewsItem型號,其中news_item_pathnews_items_path

相關問題