2012-11-27 124 views
0

我有一個叫做用戶的空表。我通過以下方式創建新用戶:ActiveRecord不返回行,但在第二個重複行後返回?

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

':cookies'關聯是什麼樣的? – willglynn

+0

已更新爲用戶表 – 0xSina

+1

您的Cookie表是否具有「已​​打開」的默認值?如果不是,也許你應該檢查不是真的,而不是錯誤的。 –

回答

0

我相信Rails會使用include時使用left outer join。但是,加入相關行時,所有值將爲null。因此,你應該使用類似於:

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

試試這個:

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