有没有办法检查模型中调用的控制器方法?
实施例: 说控制器创建方法被调用:
def create
do something
end
然后在模型中只有在控制器中创建时才会执行某些操作
if create?
do something
end
答案 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'