新しい編集
resources :cases
これらすべてのルーティングヘルパーは期待どおりにroutes.rb
機能します(cはモデルCaseのインスタンスです)。
cases_path # Index action
new_case_path # New action
case_path(c) # Show action
edit_case_path(c) # Edit action
これに変更routes.rb
:
scope "/:area" do
resources :cases
end
2つのルーティングヘルパーが失敗します(以下のエラーを参照):
cases_path # OK
new_case_path # OK
case_path(c) # Fail
edit_case_path(c) # Fail
それを機能させるには、次の最後の2つのヘルパーを変更する必要があります。
cases_path # OK
new_case_path # OK
case_path(c, :area => params[:area]) # OK
edit_case_path(c, :area => params[:area]) # OK
最初の2人のヘルパーに:areaを与える必要がなく、次の2人が必要なのはなぜですか?それはコードを混乱させます...
古い質問
最初に私はこのroutes.rbを持っていました:
resources :cases
そして私はこのタイプのリンクを生成することができました
example.com/cases/3
ID=3のケースを次のように表示します。
link_to("Show this case", @case)
次に、routes.rbを次のように変更しました。
scope "/:area" do
resources :cases
end
上記のlink_toを終了するとエラーが発生します
No route matches {:action=>"show", :controller=>"cases", :area=>#<Case id: 2,
railsはパラメータから:areaを自動的に取得しないようです。私はこれを修正して、エリアにリンクを作成させることができます
link_to("Show this case", case_path(params[:area], @item))
リンクを取得するには
example.com/area1/cases/3
しかし、私はそれが本当に好きではありません。私は何か間違ったことをしていますか?なぜレールがコントローラーとアクションを引き継ぐのに、エリアを忘れるのですか?