rails:检查从模型中调用的控制器方法

时间:2010-05-28 00:04:24

标签: ruby-on-rails ruby

有没有办法检查模型中调用的控制器方法?

实施例: 说控制器创建方法被调用:

def create
     do something
end

然后在模型中只有在控制器中创建时才会执行某些操作

if create?
      do something
end

4 个答案:

答案 0 :(得分:2)

我想你可以检查调用堆栈,但这正是的模型:它们现在应该对控制器一无所知。

检查堆栈:

if caller.grep /create/
  # do something
elsif caller.grep /update/
  #do something else
end

应该做的伎俩。

答案 1 :(得分:2)

只需将create标志传递给模型方法,或在模型中制作两种不同的方法,并从控制器中调用适当的方法。否则,您将在控制器和模型之间创建一个相当不愉快的依赖关系。如您所述,验证方法采用参数来指定它们的运行时间。

答案 2 :(得分:1)

在您的模型中,您可以询问/知道您正在处理的记录是否是新记录

p = Post.new
p.new_record? => true
p = Post.first
p.new_record? => false

也许这对你有帮助吗?

否则,在模型中,您可以添加callbacks,例如仅在保存新记录之前调用的before_create。为了保持模型的精益,你应该有很多回调,这些回调可以归入observer

希望这有帮助。

答案 3 :(得分:0)

检查

if params[:action] == 'create'