1
  1. rails new example
  2. rails g scaffold widget
  3. rake db:migrate
  4. 編輯的routes.rb如下:scope ":year" do resources :widgets end
  5. curl http://0.0.0.0:3000/2011/widgets成功
  6. echo "Widget.new.save" | rails c
  7. curl http://0.0.0.0:3000/2011/widgets/1成功
  8. 但現在curl http://0.0.0.0:3000/2011/widgets失敗,出現以下錯誤:

No route matches {:action=>"show", :controller=>"widgets", :year=>#<Widget id: 1 ..等沒有路由匹配作用域資源

爲什麼它認爲動作是 「作秀」?爲什麼它認爲年份是一個小部件實例?很奇怪。我在rails 3.0.9和3.1.0.rc6中得到了相同的結果。

在此先感謝您的幫助。

回答

2

嘗試

resources :widgets 

(以S到底)

UPD:在index.html.erb代替

link_to widget 

使用不便等

link_to widget_path(widget, :year => 2011) 

link_to widget_path(2011, widget) 
+0

我確實有'resources:widgets'(這是我的問題中的拼寫錯誤),但是我在調​​用widget_path()時錯過了一年。我應該更仔細地查看堆棧跟蹤。這是一種誤導性的錯誤消息(沒有路由匹配),但現在我知道發生了什麼。謝謝。 –

+0

我沒有在'widget_path()'的每次調用中指定年份,而是發現將'def default_url_options(options = {}) {:year => @year} end'添加到我的ApplicationController中更容易。在發現default_url_options之前,我不會提及我浪費了多少小時:-) –

相關問題