Odpowiedzi:
Szyny 2.X :@controller.action_name
Szyny 3.1.x : controller.action_name
,action_name
Szyny 4.X :action_name
before_filter
z blokiem, zrób before_filter { |controller| ... }
. stackoverflow.com/questions/2669663/…
action_name
działa w Railsach 3.2.13 i controller.action_name
nie.
W konkretnym przypadku akcji Railsów (w przeciwieństwie do ogólnego przypadku pobierania aktualnej nazwy metody) możesz użyć params[:action]
Alternatywnie możesz przyjrzeć się dostosowaniu formatu dziennika Railsów tak, aby nazwa akcji / metody była zawarta w formacie, a nie w komunikacie dziennika.
action_name == 'new'
(bez prefiksu) nadal działa dla mnie w Railsach 3.2
Ten fragment działa dla Rails 3
class ReportsController < ApplicationController
def summary
logger.debug self.class.to_s + "." + self.action_name
end
end
wydrukuje
. . .
ReportsController.summary
. . .
Odpowiedź mikeja była bardzo dokładna i pomocna, ale chciałem też wiedzieć, jak uzyskać aktualną nazwę metody w railsach.
dowiedziałem się, że jest to możliwe dzięki self.current_method
łatwo znaleźć na http://www.ruby-forum.com/topic/75258
Po prostu zrobiłem to samo. Zrobiłem to w kontrolerze pomocniczym, mój kod to:
def get_controller_name
controller_name
end
def get_action_name
action_name
end
Te metody zwrócą bieżącą nazwę kontrolera i akcji. Mam nadzieję, że to pomoże
controller_name
, czyli metodę zwracającą nazwę bieżącego kontrolera, inną metodą, która po prostu wywołuje controller_name
? Dlaczego po prostu nie zadzwonić controller_name
i skończyć z tym?