代码之家  ›  专栏  ›  技术社区  ›  Atiaxi

如果我将其与a:join一起使用,则命名为\u scope正在创建新对象

  •  0
  • Atiaxi  · 技术社区  · 17 年前

    免责声明:我最初接触RubyonRails的时间确实是几年前的事了,现在很多事情对我来说都是新的,因为我正在重新开始。其中一个叫做范围。它们看起来很好,但我没有得到我期望的结果。例如:

    class User
      has_many logs
      named_scope :logged_in, :joins => ['logs'], :conditions => ['logs.logout_at IS NULL']
    end
    
    Class Log
      belongs_to user
    end
    

    我的理解是

    User.logged_in
    

    应该与执行

    User.find(:all, :joins => ['logs], :conditions => ['logs.logout_at IS NULL'])
    

    但相反,我得到的是不同的物体。证明:

    real = User.find_by_name('admin')
      #<User id:12345, name: 'admin' ... >
    fake = User.logged_in.find_by_name('admin')
      #<User id: 54321, name: 'admin' ... >
    

    所以我的问题是:这个新的物体到底是从哪里来的,我如何才能被命名为“给我最初的那个物体的范围”?

    2 回复  |  直到 17 年前
        1
  •  3
  •   Chap    17 年前
    named_scope :logged_in, 
                :conditions => ["logs.logout_at IS NULL"], 
                :include => :logs
    
        2
  •  0
  •   wmoxam    17 年前

    看起来您有多个名为“admin”的用户

    试试这个:

    User.find_all_by_name('admin')