Rails-コントローラのアクション名から文字列


160

Railsに関する質問があります。

コントローラーアクション内でコントローラーアクションの名前を取得するにはどうすればよいですか?

たとえば、代わりに

def create
  logger.info("create")
end

次のようなものを書きたい

def create
  logger.info(this_def_name)
end

取得する方法は何this_def_nameですか?

回答:


337

Rails 2.X@controller.action_name

3.1.xへレールcontroller.action_nameaction_name

Rails 4.Xaction_name


5
または、Rails 3.0では「controller.action_name」。これは、ビューでアクション名にアクセスするための最良の方法です。
emk

2
これをbefore_filterブロックで使用したい場合は、を実行してくださいbefore_filter { |controller| ... }stackoverflow.com/questions/2669663/...
ベンジャミンオークス

3
参考までにaction_name、Rails 3.2.13 で動作しますが、動作しcontroller.action_nameません。
ザック、

rails 2.3.XXおよび@ controller.action_nameは機能しません。このバージョンのaction_nameのみを使用する必要があります。
mkralla11 14

シンボル版はありますか?
Bogdan Gusiev

34

(現在のメソッド名を取得する一般的なケースとは対照的に)Railsアクションの特定のケースでは、 params[:action]

あるいは、Railsログ形式のカスタマイズを調べて、アクション/メソッド名がログメッセージに含まれるのではなく、その形式で含まれるようにすることもできます。


8
以前はaction_nameを呼び出すことで現在のアクションを取得できましたが、それでも機能するかどうかはわかりませんが、paramsをクエリするよりも少し優れているといつも思っていました。
jonnii 2009

明確にするために、それは「controller.action_name」または「params [:action]」なので、ビューで<%if controller.action_name == 'new'%>を実行する場合があります。Rails 3.2で動作します。
dmonopoly 2012年

1
params [:controller]を使用してコントローラー名を取得することもできます
Ash Blue

action_name == 'new'(接頭辞なし)はRails 3.2でも動作します
Brendon Muir

17

コントローラ名:

<%= controller.controller_name %>

return => 'ユーザー'

アクション名:

<%= controller.action_name %>

return => '表示'

id:

<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>

return => '23'


7

このスニペットはRails 3で動作します

class ReportsController < ApplicationController

  def summary
    logger.debug self.class.to_s + "." + self.action_name
  end

end

印刷します

。。。
ReportsController.summary
。。。



-4

私は同じことをしました。私はヘルパーコントローラーでそれをしました、私のコードは:

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

これらのメソッドは、現在のコントローラーとアクション名を返します。それが役に立てば幸い


39
混乱しています。controller_name現在のコントローラーの名前を返すメソッドであるwrapを、呼び出す だけの別のメソッドに含めるのcontroller_nameなぜですか?ただ電話controller_nameしてそれで終わらせないのはなぜですか?
piersadrian
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.