Ch4*_*Ass 1 ruby activerecord ruby-on-rails
我有以下关系:
class User < ActiveRecord::Base
has_many :incoming_delegations,
:class_name => "Delegation", :foreign_key => :to_user_id,
:conditions => { :active => true }
#...
end
Run Code Online (Sandbox Code Playgroud)
和
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
Run Code Online (Sandbox Code Playgroud)
现在当我这样做
Delegation.from(User.find(43)) # I get list of delegations from user
User.last.incoming_delegations # I get list of incoming delegations
Run Code Online (Sandbox Code Playgroud)
但是当我尝试:
User.last.incoming_delegations.from(User.find(43))
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误消息:
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...
Run Code Online (Sandbox Code Playgroud)
任何想法是什么导致这个问题?
scope :from, lambda { |user| where(:from_user_id => user.id) }
Run Code Online (Sandbox Code Playgroud)
from是范围的坏名称; 把它命名为别的.
from当您尝试:from在Delegation类中调用范围时,将使用ARel中的此方法.
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |