Rails - назва дії контролера на рядок


160

У мене питання щодо Рейлів.

Як отримати ім'я дії контролера всередині дії контролера?

Наприклад, замість

def create
  logger.info("create")
end

Я хочу написати щось подібне

def create
  logger.info(this_def_name)
end

Який спосіб отримати this_def_name?

Відповіді:


337

Рейки 2.X :@controller.action_name

Рейки 3.1.x : controller.action_name,action_name

Рейки 4.X :action_name


5
Або "controlller.action_name" в Rails 3.0. Це найкращий спосіб отримати доступ до назви дії у вікні перегляду.
emk

2
Якщо ви хочете використовувати це в before_filterблоці з блоком, зробіть це before_filter { |controller| ... }. stackoverflow.com/questions/2669663/…
Бенджамін Оукс

3
FYI, action_nameпрацює в Rails 3.2.13, і controller.action_nameні.
Зак

rails 2.3.XX і @ controller.action_name не працює, для цієї версії (файлів) потрібно використовувати просто action_name.
mkralla11

Чи є версія символу?
Богдан Гусієв

34

У конкретному випадку дії Rails (на відміну від загального випадку отримання поточної назви методу) ви можете використовувати params[:action]

Крім того, ви можете заглянути в налаштування формату журналу Rails, щоб ім’я дії / методу було включене у формат, а не у ваше повідомлення журналу.


8
Ви раніше мали змогу отримати поточну дію, зателефонувавши до імені action_name, я не впевнений, що це все-таки працює, але я завжди думав, що це трохи приємніше, ніж запитувати парами.
jonnii

Просто для уточнення, це "ім'я_контролера_активності" або "парами [: дія]", тож ви можете зробити <%, якщо у вікні controller.action_name == 'новий'%>. Це працює для мене в Rails 3.2.
dmonopoly

1
Ви також можете отримати ім'я контролера через парами [: controller]
Ash Blue

action_name == 'new'(нефіксований) досі працює для мене в Rails 3.2
Брендон Муїр

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
. . .


3

Відповідь mikej була дуже точною і корисною, але те, що я також хотів знати, - як отримати поточну назву методу в рейках.

з'ясували, що це можливо за допомогою self.current_method

легко знайти на сайті http://www.ruby-forum.com/topic/75258


-4

Я просто зробив те саме. Я це робив у помічнику контролера, мій код:

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

Ці методи повернуть назву поточного контролера та дії. Сподіваюся, це допомагає


39
Заплутаний. Чому wrap controller_name- метод, який повертає ім'я поточного контролера, в інший метод, який просто викликає controller_name ? Чому б просто не зателефонувати controller_nameі зробити це з ним?
пристань
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.