0

新しい編集

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

しかし、私はそれが本当に好きではありません。私は何か間違ったことをしていますか?なぜレールがコントローラーとアクションを引き継ぐのに、エリアを忘れるのですか?

4

2 に答える 2

1

これを試して

link_to "Show this case", [:area, @case]

編集(コロンを削除)

scope "/area" do
  resources :cases
end

編集2

link_to "Show this case", case_path(@case, :area => :en)

引数として指定した場合areaは、常にそれを渡す必要があります。

于 2011-05-23T21:59:30.377 に答える
0

このメソッドをApplicationControllerに追加します。

def default_url_options(options={})
  {:area => params[:area]}
end

その場合、ルーティングヘルパーで:areaオプションを手動で設定する必要はありません。

于 2011-05-24T14:46:11.097 に答える