2013-04-05 3 views
1

У меня есть следующее соотношение:ActiveRecord сфера не работает

class User < ActiveRecord::Base 
    has_many :incoming_delegations, 
    :class_name => "Delegation", :foreign_key => :to_user_id, 
    :conditions => { :active => true } 
    #... 
end 

и

class Delegation < ActiveRecord::Base 
    belongs_to :from_user, :class_name => "User" 
    belongs_to :to_user, :class_name => "User" 

    scope :from, lambda { |user| where(:from_user_id => user.id) } 
    scope :to, lambda { |user| where(:to_user_id => user.id) } 
    #... 
end 

Теперь, когда я

Delegation.from(User.find(43)) # I get list of delegations from user 
User.last.incoming_delegations # I get list of incoming delegations 

, но когда я пытаюсь:

User.last.incoming_delegations.from(User.find(43)) 

тогда я получаю следующее сообщение об ошибке:

TypeError: Cannot visit User 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:25:in `rescue in visit' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:19:in `visit' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:281:in `visit_Arel_Nodes_JoinSource' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:19:in `visit' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:135:in `visit_Arel_Nodes_SelectCore' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/mysql.rb:41:in `visit_Arel_Nodes_SelectCore' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:121:in `block in visit_Arel_Nodes_SelectStatement' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:121:in `map' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:121:in `visit_Arel_Nodes_SelectStatement' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/mysql.rb:36:in `visit_Arel_Nodes_SelectStatement' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:19:in `visit' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:5:in `accept' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:19:in `accept' 
     from /home/jiri/.rvm/gems/[email protected]/gems/arel-3.0.2/lib/arel/visitors/bind_visitor.rb:11:in `accept' 
     from /home/jiri/.rvm/gems/ruby-1.9[email protected]/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in 
     from /home/jiri/.rvm/gems/[email protected]/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:18:i 
... 1 levels... 

любая идея, что вызывает эту проблему?

ответ

5
scope :from, lambda { |user| where(:from_user_id => user.id) } 

from - плохое имя для области; имя это что-то еще.

This from method в AREL используется, когда вы пытаетесь вызвать :from область в вашем Delegation классе.

Смежные вопросы