2

これが私のモデルです:

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ますが、それを機能させる方法がわかりません。手がかりがあれば、私と共有してください。

4

2 に答える 2

3

この問題はhttps://github.com/rails/arel/issues/149で議論されており、メーラーと遅延ジョブ、および関連する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
于 2013-07-16T05:38:29.527 に答える
0

問題は、Rails 3.2.12 を使用しているためです。この問題は、このバージョンの Rails でのみ発生するようです。したがって、プロジェクトを Rails 3.2.13 にアップグレードすると、すべてが正常に機能します。

于 2013-07-16T06:54:35.503 に答える