我想知道这是否可能?
after_create -> { some_method_from_model }, if: :should_be_executed?
语法没问题,但Proc会被调用/执行还是刚创建?
答案 0 :(得分:15)
如果要在模型上调用方法,最好的方法是将模型作为lambda的参数传递,然后使用它来调用所需的方法,如下所示:
after_create -> (model) { model.some_method }, if: :execution_condition_satisfied?
这是因为lambda中self
的值不是模型而是Proc对象,并且在没有显式接收器的情况下,Ruby尝试在self
中调用该方法。
在您的示例中,Ruby将尝试在Proc对象中查找some_model_method
。所以不,你的例子不起作用,但与新的lambda文字语法无关。
我希望它有所帮助;)
答案 1 :(得分:1)
这对我来说似乎过于复杂。我只是将if测试放在被调用的方法中。
after_create :some_method
def some_method
if condition_satisfied
#do the stuff
end
end