4

とても簡単な質問があります。Rails 3 でカスタム アクションをルーティングする最も簡単な方法を見つけようとしています。

UsersControllerコントローラーとアクションがあるとしましょうpromote_to_premium

または

http://localhost:3000/users/#{user_id}/promote_to_premium  

ない

http://localhost:3000/users/promote_to_premium/#{user_id}

動作します。

new/delete/update/create/ect/とは異なるすべてのカスタムアクションをroutes.rbで指定する必要がありますか....?????

ありがとうございました。

4

4 に答える 4

22

はい、routes.rb で指定する必要があります。
例:

resources :users do
  member do
    post :promote_to_premium
  end
end

このようにして、次のようにルートにアクセスできます。

http://localhost:3000/users/#{user_id}/promote_to_premium
于 2012-06-27T14:32:46.250 に答える
1

これを routes.rb で使用する必要があります。

match "/users/:id/promote_to_premium" => "users#promote_to_premium"
于 2012-06-27T14:33:49.053 に答える
1

コントローラーのカスタム メソッドについては、routes.rb ファイルでルートを指定する必要があります。

get something は、コントローラーで「something」という名前で呼び出されるアクション (メソッド) である必要がget""ありmatch""=>""ます。ただし、コントローラーにメソッドがないため、使用できません。したがって、コントローラーでいくつかの操作を行う必要があります。したがって、書く必要があります "post"
"controller/something"get"controller/:id"":id"matchcontroller/:id'action'

"match users/:id/promote_to_premium"=>  "users#promote_to_premium"

ただし、データベースに何かを書き込む場合は、' post' を使用する必要があります。私が知っていることから、私はあなたが試すことができると思います

match 'users/:id/promote_to_premium' => 'users#promote_to_premium', :via => :post 

以下のリンクでルートの詳細を調べることができます: http://guides.rubyonrails.org/routing.html

于 2012-06-27T15:35:09.573 に答える
0

はい、すべてのルートを指定する必要があります。実際には、コマンドを使用して通常のルートも定義しますresource

任意のアクションへのアクセスを許可する特定のワイルドカード コマンドがありますが、アクセス可能にしたくないアクションへのアクセスを許可するため、これはデバッグ目的でのみ使用されます。

match ':controller(/:action(/:id(.:format)))'
于 2012-06-27T14:32:31.600 に答える