Raylar - denetleyicinin eylem adını dizeye


160

Bir Rails sorum var.

Denetleyici eyleminin içine bir denetleyici eyleminin adını nasıl alabilirim?

Örneğin,

def create
  logger.info("create")
end

Gibi bir şey yazmak istiyorum

def create
  logger.info(this_def_name)
end

Almanın yolu nedir this_def_name?

Yanıtlar:


337

Raylar 2.X :@controller.action_name

3.1.x Raylar : controller.action_name,action_name

Raylar 4.X :action_name


5
Veya Rails 3.0'da 'controller.action_name'. Görünümdeki eylem adına erişmenin en iyi yolu budur.
emk

2
Bunu before_filterbir blok ile kullanmak istiyorsanız yapın before_filter { |controller| ... }. stackoverflow.com/questions/2669663/…
Benjamin Oakes

3
FYI, action_nameRails 3.2.13'te çalışıyor ve controller.action_nameçalışmıyor.
Zach

2.3.XX ve @ controller.action_name rayları çalışmıyor, bu sürüm (ler) için yalnızca action_name kullanmalısınız.
mkralla11

Sembol versiyonu var mı?
Bogdan Gusiev

34

Belirli bir Rails eylemi durumunda (geçerli yöntem adını almanın genel durumunun aksine) kullanabilirsiniz params[:action]

Alternatif olarak, eylem / yöntem adının günlük iletinizde değil biçime dahil edilmesi için Rails günlük biçimini özelleştirmeye bakmak isteyebilirsiniz.


8
Action_name'yi çağırarak geçerli eylemi elde edebiliyordunuz, bunun hala işe yarayıp yaramadığından emin değilim, ama her zaman paramleri sorgulamaktan biraz daha hoş olduğunu düşündüm.
jonnii

Açıklığa kavuşturmak gerekirse, bu "controller.action_name" veya "params [: action]" şeklindedir, bu nedenle görünümde <% if controller.action_name == 'new'%> yapabilirsiniz. Benim için Rails 3.2'de çalışıyor.
12'de dmonopol

1
Denetleyici adını params [: denetleyici] aracılığıyla da alabilirsiniz
Ash Blue

action_name == 'new'(ön düzeltilmemiş) hala benim için Rails 3.2
Brendon Muir'de çalışıyor

17

denetleyici adı:

<%= controller.controller_name %>

return => 'kullanıcılar'

işlem adı:

<%= controller.action_name %>

return => 'göster'

İD:

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

return => '23'


7

Bu snippet Rails 3 için çalışıyor

class ReportsController < ApplicationController

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

end

yazdıracak

. . .
ReportsController.summary
. . .



-4

Ben de aynısını yaptım. Yardımcı denetleyicide yaptım, kodum:

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

Bu yöntemler geçerli denetleyiciyi ve eylem adını döndürür. Umarım yardımcı olur


39
Kafa karıştırıcı. controller_nameGeçerli denetleyicinin adını döndüren bir yöntem olan, yalnızca çağıran başka bir yöntemde neden sarma controller_name? Neden sadece onu arayıp bitirmeyesiniz ki controller_name?
piersadrian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.