4

私はRailsアプリに取り組んでおり、URL内のパラメーターの存在に基づいて、コントローラー内のさまざまなアクションにルーティングする方法を探しています。

たとえば、website.com/modelにルーティングしたいのですが、にルーティングしmodel#indexたいのです。これを行う方法はありますか?website.com/model?opt=devmodel#show

4

2 に答える 2

4

ルート制約を使用してリクエストオブジェクトを確認し、URLパラメータがあるかどうかを確認します。安らかなルートを使用している場合は、安らかなルートの前にこの「1回限り」を配置する必要があります。このようなもの:

get 'users' => 'users#show', constraints: { query_string: /.+/ }
resources :users

つまり、「/ users?opt = dev」をリクエストすると、特殊なケースに一致するということです。それ以外の場合は、インデックスアクションへの通常の安らかなルートになります。次に、model#showアクションは、param [:opt]を取得し、それを使って何でもすることを知っている必要があります。

また、正規表現は非常に緩く、パラメータをチェックしているだけであることに注意してください...実行しようとしているものに合わせて、正規表現を締める必要があります。

于 2012-06-29T19:26:17.580 に答える
1

厳密には同じではありませんが、この投稿にアクセスして、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" %> 
于 2013-03-15T06:59:56.123 に答える