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


84

我有以下代码:

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

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

Answers:


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

6
结合@tihom和此响应,您可以得到类似的内容 before_action only: [:show, :edit, :update, :destroy] do |c| c.set_support(params[:action) end
微生物12年

我建议使用以下字符串:before_action {| action | action.update_user_balance(10000)},其中up​​date_user_balance是获取参数的模型方法:def update_user_balance(arg)... end
mmike 2016年

1
这在较长的方法中效果很好,否则我将使用下面由凯尔·德科特(Kyle Decot)提交的答案。
jkwok

52

您可以使用lambda:

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

10

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

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

另一个例子:

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

5

您可以将lambda传递给,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'


2
我试图使此语法正常工作,但未能成功。Kyle使用的语法对我有用。
J3RN

此语法不起作用
Prime

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
...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.