我有一个名为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
答案 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])