ActiveRecord没有返回行,但在第二个重复行后返回?

时间:2012-11-27 03:34:04

标签: ruby-on-rails ruby activerecord

我有一个名为users的空表。我通过以下方式创建了一个新用户:

User.create :fb_id => fb_id

成功创建了一个条目。

然后我通过以下方式查询:

User.first(:include => :cookies, :conditions => {:cookies => {:opened => false} , :fb_id => fb_id})

返回nil !!

我检查表,用户在那里。 所以我通过以下方式创建了一个新的重复用户:

User.create :fb_id => fb_id

现在确实有两行具有相同的fb_id。如果我现在像以前一样查询:

User.first(:include => :cookies, :conditions => {:cookies => {:opened => false} , :fb_id => fb_id})

它现在返回id为2的新用户!

发生了什么事?我一直试图调试它3-4个小时,但无法搞清楚。 感谢

我的模特:

class User < ActiveRecord::Base
    has_many :cookies
    has_many :fortunes, :through => :cookies
end

class Cookie < ActiveRecord::Base
    belongs_to :user
    belongs_to :fortune
end

class Fortune < ActiveRecord::Base
    has_many :cookies
    has_many :users, :through => :cookies
end

2 个答案:

答案 0 :(得分:0)

试试这个:

  User.first(:include => :cookies, :conditions => ["cookies.opened=? or users.fb_id=?",false, fb_id])

答案 1 :(得分:0)

我相信Rails在使用left outer join时会使用include。但是,在加入相关行时,所有值都将为null。因此,您应该使用类似的东西:

User.first(:include => :cookies, 
           :conditions => ["cookies.opened <> ? AND fb_id = ?", true, fb_id])