activerecord回调的新lambda文字语法

时间:2014-02-21 13:13:06

标签: ruby-on-rails lambda

我想知道这是否可能?

after_create -> { some_method_from_model }, if: :should_be_executed?

语法没问题,但Proc会被调用/执行还是刚创建?

2 个答案:

答案 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