Rails 4 before_action,将参数传递给调用方法

时间:2013-10-08 23:24:03

标签: ruby

我有以下代码:

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

是否可以将字符串传递给方法set_support以应用于所有4种视图方法? 对于视图中的每个方法,是否可以将不同的字符串传递给方法set_support

5 个答案:

答案 0 :(得分:133)

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

答案 1 :(得分:33)

您可以使用lambda:

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

答案 2 :(得分:6)

简短的单行答案(我个人更喜欢回调)是:

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

另一个例子:

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

答案 3 :(得分:3)

您可以将lambda传递给before_action并将params[:action]传递给set_support方法,如下所示:

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

答案 4 :(得分:0)

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