23

パスに基づいてコントローラーとアクション名を取得しようとしています。私はルートを持っています:

map.resources :permissions

私は使用できると思いました:

ActionController::Routing::Routes.recognize_path "/permissions/1"

次のようなハッシュを取得するには:

{ :controller => "permissions", :action => "show" }

返される実際のハッシュは次のとおりです。

{ :controller => "permissions", :action => "1" }

渡された ID だけでなく、正しいアクション名を取得するにはどうすればよいですか? ディスパッチャが何らかの形でそれを達成できるに違いありません。そうしないと Rails は機能しません。

4

3 に答える 3

12

あなたは本当に何を求めていますか?アクション名とコントローラー名が本当に必要な場合は...単に尋ねることができます

controller.controller_name

controller.action_name

それは役に立ちますか、それとも文字列を解析する必要がありますか?

于 2010-08-11T10:07:04.193 に答える
4

これが私がやったことです。それは醜く、もっと良い方法があるはずですが、今のところはうまくいきます。これはbefore_filterで発生するため、ユーザーがアクセスしようとしているコントローラー/アクションにアクセスできるかどうかを確認できます。

モデルベースの承認ではなく、ルートベースの承認を使用することを選択しました。

# Get method of current request
method = options[:method] ? options[:method] : 'get'

# Create a new request - hate this that is required
env = Rack::MockRequest.env_for(url, {:method => method})
request = ActionController::Request.new(env)

# For some reason, calling this fills in the controller / action information for the request
# just using recognize_path doesn't work correctly with resources...
ActionController::Routing::Routes.recognize(request)

次に、request.params [:controller]とrequest.params [:action]を使用してコントローラーとアクションにアクセスします。

ActionController :: Routing :: Routes.recognize_path( "/ permits / 1")が正しいアクションを返した場合、これはすべて必要ありません。

于 2010-10-08T15:41:32.380 に答える