89

我有以下代码:

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

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

4

5 回答 5

173
before_action only: [:show, :edit, :update, :destroy] do
  set_support("value")
end
于 2013-10-08T23:29:51.710 回答
56

您可以使用 lambda:

class SupportsController < ApplicationController
  before_action -> { set_support("value") }, 
    only: [:show, :edit, :update, :destroy]
  ...
于 2015-12-16T21:38:01.123 回答
11

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

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

另一个例子:

after_filter only:[:destroy, :kerplode] { method2_namey_name(p1, p2) }
于 2016-10-07T13:40:20.010 回答
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'

于 2013-10-08T23:30:31.367 回答
0

SupportsController

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

应用控制器

class ApplicationController < ActionController
  def set_support (value = "")
    p value
  end
...
于 2019-05-20T20:11:13.190 回答