Подтвердить что ты не робот

Rails 4 before_action, передает параметры вызываемому методу

У меня есть следующий код:

class SupportsController < ApplicationController
  before_action :set_support, only: [:show, :edit, :update, :destroy]
  ....

Можно ли передать строку методу set_support для всех 4 методов просмотра? Можно ли передать другую строку методу set_support для каждого метода в представлении?

4b9b3361

Ответ 1

before_action only: [:show, :edit, :update, :destroy] do
  set_support("value")
end

Ответ 2

Вы можете использовать lambda:

class SupportsController < ApplicationController
  before_action -> { set_support("value") }, 
    only: [:show, :edit, :update, :destroy]
  ...

Ответ 3

Короткий и однострочный ответ (который я лично предпочитаю для обратных вызовов):

before_action except:[:index, :show] { method :param1, :param2 }

Другой пример:

after_filter only:[:destroy, :kerplode] { method2_namey_name(p1, p2) }

Ответ 4

Вы можете передать лямбду в before_action и передать params[:action] в метод set_support следующим образом:

class SupportsController < ApplicationController
  before_action only: [:show, :edit, :update, :destroy] {|c| c.set_support params[:action]}
  ....

Затем отправляемый параметр является одной из строк: 'show', 'edit', 'update' или 'destroy'.

Ответ 5

SupportsController

class SupportsController < ApplicationController    
  before_action only: [:show, :edit, :update, :destroy] { |ctrl|
    ctrl.set_support("the_value")
  }
...

ApplicationController

class ApplicationController < ActionController
  def set_support (value = "")
    p value
  end
...