簡體   English   中英

ActiveRecord范圍不起作用

[英]ActiveRecord scope does not working

我有以下關系:

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/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:25:in `rescue in visit'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:19:in `visit'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:281:in `visit_Arel_Nodes_JoinSource'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:19:in `visit'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:135:in `visit_Arel_Nodes_SelectCore'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/mysql.rb:41:in `visit_Arel_Nodes_SelectCore'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:121:in `block in visit_Arel_Nodes_SelectStatement'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:121:in `map'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:121:in `visit_Arel_Nodes_SelectStatement'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/mysql.rb:36:in `visit_Arel_Nodes_SelectStatement'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:19:in `visit'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/visitor.rb:5:in `accept'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/to_sql.rb:19:in `accept'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/arel-3.0.2/lib/arel/visitors/bind_visitor.rb:11:in `accept'
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in
        from /home/jiri/.rvm/gems/ruby-1.9.3-p194@OM/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:18:i
... 1 levels...

你知道是什么原因導致這個問題嗎?

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

from是作用域的壞名字; 給它起個別的名字

當您嘗試在Delegation類中調用:from范圍時,將使用ARel中的from方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM