如何使用各种参数调用before_filter,具体取决于控制器?

时间:2013-03-15 15:12:50

标签: ruby-on-rails ruby

我有两个控制器:

class MyController < ApplicationController
  before_filter :get_model
  # Actions
end

class MyOtherController < ApplicationController
  before_filter :get_model
  # Actions
end

在我的ApplicationController中,我使用了一个函数来获取某个模型:

def get_model
  @model = Model.find(params[:model_id])
end

但是,保存模型ID的参数对于两个控制器都不相同。

如何在不重复自己的情况下完成这项工作?

1 个答案:

答案 0 :(得分:1)

before_filter可以接受Proc或lambda作为其第一个参数。

重构您的get_model函数,使其接受并识别:

def get_model(id)
  @model = Model.find(id)
end

然后用lambda调用你的before_filter,并传递相应的id:

before_filter lambda { get_model(params[:whatever_id]) }