Rails - Name der Controller-Aktion für die Zeichenfolge

159

Ich habe eine Rails-Frage.

Wie erhalte ich den Namen einer Controller-Aktion innerhalb der Controller-Aktion?

Zum Beispiel anstelle von

def create
  logger.info("create")
end

Ich möchte so etwas schreiben

def create
  logger.info(this_def_name)
end

Was ist ein Weg zu bekommen this_def_name?

Pavel K.
quelle

Antworten:

336

Schienen 2.X :@controller.action_name

Schienen 3.1.X : controller.action_name,action_name

Schienen 4.X :action_name

JellicleCat
quelle
5
Oder 'controller.action_name' in Rails 3.0. Dies ist der beste Weg, um auf den Aktionsnamen in der Ansicht zuzugreifen.
Emk
2
Wenn Sie dies in einem before_filtermit einem Block verwenden möchten , tun Sie dies before_filter { |controller| ... }. stackoverflow.com/questions/2669663/…
Benjamin Oakes
3
Zu action_nameIhrer Information , funktioniert in Rails 3.2.13 und controller.action_namenicht.
Zach
Schienen 2.3.XX und @ controller.action_name funktionieren nicht, Sie müssen nur action_name für diese Version (en) verwenden.
mkralla11
Gibt es eine Symbolversion?
Bogdan Gusiev
33

Im speziellen Fall einer Rails-Aktion (im Gegensatz zum allgemeinen Fall, dass der aktuelle Methodenname abgerufen wird) können Sie verwenden params[:action]

Alternativ können Sie das Rails-Protokollformat so anpassen, dass der Aktions- / Methodenname im Format enthalten ist und nicht in Ihrer Protokollnachricht enthalten ist.

mikej
quelle
8
Früher konnten Sie die aktuelle Aktion durch Aufrufen von action_name abrufen. Ich bin mir nicht sicher, ob das noch funktioniert, aber ich dachte immer, es wäre ein bisschen schöner, als die Parameter abzufragen.
Jonnii
Zur Verdeutlichung ist es "controller.action_name" oder "params [: action]". Sie können also <% tun, wenn controller.action_name == 'new'%> in der Ansicht ist. Es funktioniert für mich in Rails 3.2.
Dmonopol
1
Sie können den Namen des Controllers auch über params [: controller] abrufen
Ash Blue
action_name == 'new'(nicht fixiert) funktioniert immer noch für mich in Rails 3.2
Brendon Muir
15

Controller-Name:

<%= controller.controller_name %>

return => 'Benutzer'

Aktionsname:

<%= controller.action_name %>

return => 'show'

Ich würde:

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

return => '23'

dumP
quelle
6

Dieses Snippet funktioniert für Rails 3

class ReportsController < ApplicationController

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

end

wird gedruckt

. . .
ReportsController.summary
. . .

Vladimir Kroz
quelle
2

mikejs antwort war sehr präzise und hilfreich, aber ich wollte auch wissen, wie man den aktuellen methodennamen in schienen erhält.

fand heraus, dass es mit self.current_method möglich ist

leicht zu finden unter http://www.ruby-forum.com/topic/75258

Pavel K.
quelle
-4

Ich habe einfach das Gleiche getan. Ich habe es in Helper Controller gemacht, mein Code ist:

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

Diese Methoden geben den aktuellen Controller und den aktuellen Aktionsnamen zurück. Ich hoffe es hilft

Rushabh Ajay Hathi
quelle
39
Verwirrend. Warum Wrap controller_name, eine Methode, die den Namen des aktuellen Controllers zurückgibt, in eine andere Methode, die nur aufruft controller_name ? Warum nicht einfach anrufen controller_nameund fertig sein?
Piersadrian