模型内的延迟作业 - 参数数量错误

时间:2013-07-16 03:56:11

标签: ruby-on-rails ruby actionmailer delayed-job

这是我的模特:

class User
  def join(race)
    #blah blah blah ....
    UserMailer.delay.join_race(self, race) #I'm stuck here
  end
end

我的UserMailer就像这样

class UserMailer
  def join_race(user, race)
    #Another blah blah blah, nothing important here
    mail(:to => user.email)
  end
end

现在,每当我致电user.join(race)时,都会显示如下错误:

ArgumentError: wrong number of arguments (2 for 1)
from /home/xxx/.rvm/gems/ruby-1.9.3-p194/gems/arel-3.0.2/lib/arel/expressions.rb:3:in `count'
from /home/xxx/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:224:in `binary?'
from /home/xxx/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:233:in `visit_String'
from /home/xxx/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:102:in `accept'
from /home/xxx/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:292:in `block in visit_Hash'
from /home/xxx/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:290:in `each'
 ...

如果我将其转换为正常功能(.delay前面没有join_race),则可以正常工作。

我发现了类似的问题,但他们都是在使用.all后没有调用where方法。我怀疑self可能是问题,但我不知道如何使它工作。如果您有任何线索,请与我分享。

2 个答案:

答案 0 :(得分:3)

https://github.com/rails/arel/issues/149讨论了这个问题,包括提及Mailer和延迟的工作,以及相关的https://github.com/rails/rails/issues/9263

包括以下解决方法:

module Arel
  module Nodes
    class SqlLiteral < String
      def encode_with(coder)
        coder['string'] = to_s
      end
      def init_with(coder)
        clear << coder['string']
      end
    end
  end
end

答案 1 :(得分:0)

问题是因为我使用的是Rails 3.2.12。看起来这个问题只发生在这个版本的Rails中。因此,我将我的项目升级到Rails 3.2.13并且一切正常。