JRuby on Rails2.0 jdbc_adapter
JRuby上で動かしていたRailsアプリを2.0に移行してみたら、
ArgumentError (wrong # of arguments(2 for 1)): C:/dev/jruby/jruby-1.0.2/lib/ruby/gems/1.8/gems/activerecord-2.0.1/lib/active_record/transactions.rb:129:in `rollback_active_record_state!' C:/dev/jruby/jruby-1.0.2/lib/ruby/gems/1.8/gems/activerecord-2.0.1/lib/active_record/transactions.rb:108:in `save_with_transactions'
という例外がActiveRecord::Base#updateを実行すると出る。wrong # of arguments(2 for 1)がどこから出てるのかさっぱり見当がつかなかったけど、地道にログを出してトレースしていったら、原因が判明。
def attributes_with_quotes(include_primary_key = true) #:nodoc: aq = attributes_with_quotes_pre_oracle(include_primary_key) if connection.class == ConnectionAdapters::JdbcAdapter && (connection.is_a?(JdbcSpec::Oracle) || connection.is_a?(JdbcSpec::Mimer)) aq[self.class.primary_key] = "?" if include_primary_key && aq[self.class.primary_key].nil? end aq end
attributes_with_quotes must have 2 arguments in Rails2.0!
ってわけで、本来あるべき引数を足してみました。
def attributes_with_quotes(include_primary_key = true, include_readonly_attributes = true)
一応動いています。そのうち直してもらえると思うので、当分これでしのぎます。
trunkでは直ってるらしいです。http://jira.codehaus.org/browse/JRUBY-1570