Как определить, какой контроллер был вызван из ApplicationController? - PullRequest
0 голосов
/ 03 июля 2019

Я бы хотел поместить один метод в мой ApplicationController и запускать его только в случае, если вызваны некоторые контроллеры. Аналогично разработать параметры дезинфицирующего средства:

before_action :configure_permitted_parameters, if: :devise_controller?

Я пробовал:

before_action :recent_discussions, if: :first_controller? || :second_controller? || :third_controller?

Однако first_controller? и т. Д. Являются неопределенными методами.

Есть ли способ вызвать что-то в ApplicationController только для определенных контроллеров?

Ответы [ 4 ]

2 голосов
/ 03 июля 2019

Вставьте это в свой контроллер приложения

class ApplicationController < ActionController::Base
  # more code

  def special_controller?
    controller = params[:controller]
    special_controllers = %w(first second third)
    special_controllers.include? controller
  end
end

И поместите это в свои специальные контроллеры

class FirstController < ApplicationController
  before_action :recent_discussions, if: :special_controller?

  # more code
end
2 голосов
/ 03 июля 2019

Предполагая, что вы имели в виду || вместо && в псевдокоде вашего вопроса (&& не имеет смысла), это будет работать:

FANCY_CONTROLLERS = %w[FirstController SecondController ThirdController]
before_action :recent_discussions,
  if: proc { FANCY_CONTROLLERS.include? "#{controller_name.camelize}Controller" }
1 голос
/ 03 июля 2019

Вы можете определить приватный метод def my_controller?; end в ApplicationController и использовать фильтр before_action :recent_discussions, if: :my_controller?

Затем, в контроллерах, которые вы хотите, чтобы этот код выполнялся, переопределите def my_controller?; true; end

1 голос
/ 03 июля 2019

Вы можете использовать request.referrer, чтобы получить путь к предыдущему действию.

Чтобы получить ответственность контроллера за это действие, используйте: Rails.application.routes.recognize_path(request.referrer)[:controller]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...