私はRailsアプリに取り組んでおり、URL内のパラメーターの存在に基づいて、コントローラー内のさまざまなアクションにルーティングする方法を探しています。
たとえば、website.com/model
にルーティングしたいのですが、にルーティングしmodel#index
たいのです。これを行う方法はありますか?website.com/model?opt=dev
model#show
私はRailsアプリに取り組んでおり、URL内のパラメーターの存在に基づいて、コントローラー内のさまざまなアクションにルーティングする方法を探しています。
たとえば、website.com/model
にルーティングしたいのですが、にルーティングしmodel#index
たいのです。これを行う方法はありますか?website.com/model?opt=dev
model#show
ルート制約を使用してリクエストオブジェクトを確認し、URLパラメータがあるかどうかを確認します。安らかなルートを使用している場合は、安らかなルートの前にこの「1回限り」を配置する必要があります。このようなもの:
get 'users' => 'users#show', constraints: { query_string: /.+/ }
resources :users
つまり、「/ users?opt = dev」をリクエストすると、特殊なケースに一致するということです。それ以外の場合は、インデックスアクションへの通常の安らかなルートになります。次に、model#showアクションは、param [:opt]を取得し、それを使って何でもすることを知っている必要があります。
また、正規表現は非常に緩く、パラメータをチェックしているだけであることに注意してください...実行しようとしているものに合わせて、正規表現を締める必要があります。
厳密には同じではありませんが、この投稿にアクセスして、POSTを介して同じことを行う方法を考えている場合は、request_paramtersに基づいて行うことができます。
あなたのroutes.rbのために..
module MyConstraintName
extend self
def matches?(request)
request.request_parameters["routeFlag"] == "routeToModelShow"
end
end
match "pages/:id", :via=>:post, :controller=>"model", :action=>"show", :constraints => MyConstraintName
そしてあなたの形で例えば。
<%= hidden_field_tag :routeFlag, "routeToModelShow" %>