是否有方法检查从模型中调用哪个控制器方法?rails:检查从模型中调用哪个控制器方法
例: 说出控制器创建方法被调用:
def create
do something
end
然后在模型中做一些只有在控制器创建时被称为
if create?
do something
end
是否有方法检查从模型中调用哪个控制器方法?rails:检查从模型中调用哪个控制器方法
例: 说出控制器创建方法被调用:
def create
do something
end
然后在模型中做一些只有在控制器创建时被称为
if create?
do something
end
我想像你可以检查调用堆栈,但这正是型号是而不是:他们现在应该没有关于控制器。
检查堆栈:
if caller.grep /create/
# do something
elsif caller.grep /update/
#do something else
end
应该做的伎俩。
只需将create
标志传递给模型方法,或者在模型中创建两种不同的方法并从控制器调用相应的方法。否则,你会在控制器和模型之间创建一个相当不愉快的依赖关系。如您所述,验证方法需要一个参数来指定它们何时运行。
这是一个特例。有时你需要看看它来自何种方法。例如在验证方法中有:on =>:create symbol – djburdick 2010-05-28 00:47:06
在这种情况下,只需使用'caller'方法返回一个名为方法名称的数组。 – 2010-05-28 15:22:37
一方面很高兴知道这样的事情是可能的。但是这对我来说就像@Jakub所说的那样错误:这不是模型的目的。模型可以知道你是在创建一个新的对象还是在更新一个现有的对象。如果有需要的话,我会添加一个参数到我的初始化或其他东西。为了让模型尽可能无知和分离(更不用说可测试:你将如何测试这种行为?)。 – nathanvda 2010-05-28 19:06:28