在非标准动作的轨道中挂钩之前/之后定制?

时间:2009-10-20 18:55:39

标签: ruby-on-rails ruby hook

我有一个带有一些非标准操作的控制器,例如admin,moderate等。我尝试使用不起作用的钩子before_admin。是否可以将这些钩子用于我的自定义操作?

抱歉缺乏清晰度。假设我在保存之前有想要发生的事情。在模型中很容易做before_save :do_whatever。我希望有before_admin :do_somethingbefore_moderate :do_something之类的东西,这些是我控制器中的自定义方法。

1 个答案:

答案 0 :(得分:1)

如果我理解你,你需要一个before_filter。

class MyController < ActionController::Base 
  before_filter :do_whatever, :only => :admin

  def admin
    # Code for your controller action
  end

  private

  def do_whatever
    # Code that runs before the admin action
  end
end

有关详细信息,请参阅here

编辑:如果您希望不同的控制器/操作对模型执行不同的操作,则将该逻辑放在控制器中的适当位置。适当的MVC设计使模型不知道操纵它的控制器/动作。现在看起来似乎不方便,但从长远来看,它将大大有助于保持代码清洁和可用。

再次编辑:对不起,你问的是怎么回事,而不是为什么,我完全错过了。你会这样做:

def action
  @thing = Thing.find(params[:id])
  @thing.boolean = true
  @thing.save
end