0

テストアプリケーションでRails4を使用しています。resources :fooタイプURLのように標準ではない任意のURLがあります。理想的には、私が望む最終結果は、次の場所に移動できるようにすることです。

/contests/:id/enter

ビューでは、次のような名前付きヘルパーを使用してリンクを設定できれば素晴らしいと思います。

edit_contests_enter(:id)

上記のような任意のURLでヘルパーパスを使用できるように、上記のルートを定義するための最良の方法は何でしょうか?必ずしもそうである必要はありませんがedit_contests_enter(:id)、ヘルパーパスが上記のようにURLにつながる限り、それは素晴らしいことです。

4

2 に答える 2

3

あなたのコンテストはリソースであり、あなたの訪問者があなたに行くとき、/contests/:id/enter彼らにオブジェクトを作成してもらいたいと思いますuser <=> contest。それを呼びましょうparticipation

participationこれで、Railsアプリの他のリソースとまったく同じになるため、次のroutes.rbようなファイルが作成されます。

resources :contests do 
  resources :participations
end

編集や破棄など、参加を作成する以外のことを他の人に行わせたくありません。そして、おそらくあなたはのような素敵なURIが必要です/contests/:id/enter。あなたがしなければならないのは

resources :contests do 
  resources :participations, :only => [:new, :create]
  get "enter" => "participations#new"
end

これを行うと、という名前のルートヘルパーが表示されcontest_enterます。あなたのparticipations#newフォームではPOST、いつものように/contests/:id/participations

于 2013-03-25T03:20:07.460 に答える
2

resourcesのブロックがある場合は:contests、次を使用してContestsControllerに新しい「メンバー」ルートを定義できます。

resources :contests do
  member do
    get :enter
  end
end

これにより、名前付きメンバールートが自動的に生成されます。このルートの名前は、を実行することで見つけることができますrake routes

于 2013-03-25T02:49:14.120 に答える