0

Я перемещаю старое приложение с рельсов 2.3.2 - 2.3.18, ruby ​​1.8.7-p72 - 1.8.7-p374 , (а затем после этого, рубин 1.9.3 и рельсы 3)Обновление от рельсов 2.3.2 до 2.3.18, дающее ActiveRecord :: StatementInvalid для простого запроса

Мой первый запрос, который я пробовал, который должен быть простым, дает мне проблемы. В консоли:

?> User.find(:all, :joins => { :sms_users => :join_smsuser_campaigns }, 
        :conditions => { :sms_users => { 
             :join_smsuser_campaigns => { 
              :campaign_id => 18 } } }) 

Выглядит довольно просто?

Это мне дает:

ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2363:in `sanitize_sql_hash_for_conditions' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2079:in `map' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `each' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `map' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `sanitize_sql_hash_for_conditions' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2361:in `sanitize_sql_hash_for_conditions' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2079:in `map' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `each' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `map' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2345:in `sanitize_sql_hash_for_conditions' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:2274:in `sanitize_sql' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1528:in `merge_conditions' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1526:in `each' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1526:in `merge_conditions' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1838:in `add_conditions!' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1721:in `construct_finder_sql' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:1582:in `find_every' 
    from /Users/decker/.rvm/gems/ruby-1.8.7-p374/gems/activerecord-2.3.18/lib/active_record/base.rb:619:in `find' 
    from (irb):6>> 

Просто чтобы подтвердить, что я могу реально сделать тип пользователя:

?> User.find(1) 
=> #<User id: 1, date_created: "2008-01-06 17:22:12", email: "[email protected]", name: "First Last", phone_number: "1234567890", last_communication: "2012-11-09 22:34:43"> 

Таким образом, это выглядит, как я могу создавать пользовательские объекты.

Любая идея, почему этот простой запрос не работает? Я прочитал 2.3.18 activerecord documenation, и похоже, что мой пример похож на пример, который они показывают ... Может быть, у меня есть камень, вызывающий проблему? Это не очевидно из трассировки стека.

ответ

0

Изменение синтаксиса для запроса работал для меня:

users = User.find(:all, :joins => { :sms_users => :join_smsuser_campaigns }, 
    :conditions => { 'join_smsuser_campaigns.campaign_id' => session[:campaign_id].to_i}, 
    :order => 'join_smsuser_campaigns.conversation_status DESC, join_smsuser_campaigns.last_communication DESC, sms_users.id ASC')