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

par*_*par 77 ruby

我有以下代码:

class SupportsController < ApplicationController
  before_action :set_support, only: [:show, :edit, :update, :destroy]
  ....
Run Code Online (Sandbox Code Playgroud)

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

Lin*_*der 141

before_action only: [:show, :edit, :update, :destroy] do
  set_support("value")
end
Run Code Online (Sandbox Code Playgroud)

  • 结合@tihom和这个响应,你可以得到类似这样的东西:只有前一个:[:show,:edit,:update,:destroy] do | c | c.set_support(params [:action] end` (5认同)

Kyl*_*cot 36

你可以使用lambda:

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


小智 8

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

before_action except:[:index, :show] { method :param1, :param2 }
Run Code Online (Sandbox Code Playgroud)

另一个例子:

after_filter only:[:destroy, :kerplode] { method2_namey_name(p1, p2) }
Run Code Online (Sandbox Code Playgroud)


tih*_*hom 5

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

class SupportsController < ApplicationController
  before_action only: [:show, :edit, :update, :destroy] {|c| c.set_support params[:action]}
  ....
Run Code Online (Sandbox Code Playgroud)

然后发送的参数是字符串之一:'show', 'edit','update''destroy'

  • 我试图让这个语法工作,但无法。Kyle 使用的语法对我有用。 (2认同)