0

我有一个名为 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
4

2 回答 2

0

尝试这个:

  User.first(:include => :cookies, :conditions => ["cookies.opened=? or users.fb_id=?",false, fb_id])
于 2012-11-27T03:51:06.110 回答
0

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

User.first(:include => :cookies, 
           :conditions => ["cookies.opened <> ? AND fb_id = ?", true, fb_id])
于 2012-11-27T03:58:08.050 回答