2011-12-02 28 views
1

我有加入表的偉大工程,下面的查詢:Rails的查詢連接表與不等於數據

@eventsmy = Event.find( 
:all, 
:joins => :rsvps, :conditions => {:rsvps => { :user_id => current_user.id }}) 

而且我也想有另一個查詢,做的正好相反。即查找所有未被current_user發送的事件行。我發現了一個錯誤以下:

@eventsother = Event.find(
:all, 
:joins => :rsvps, :conditions => {:rsvps => :conditions => {["user_id != ?", current_user.id]} }) 

這也給了錯誤:

@eventsother = Event.find(
:all, 
:joins => :rsvps, :conditions => {:rsvps => :conditions => current_user.id! }}) 

回答

3

記住,這一切正在做的是找到其他用戶已經回覆過的所有事件,保持這樣我不認爲你是這個接近正確的方式...

這是你所要求的:

@eventsmy = Event.joins(:rsvp).where('rsvps.user_id != ?', current_user.id) 

我覺得你真正需要的是...如果你想找到當前用戶已經被邀請參加,但一直沒有回覆過的事件,那麼你需要做這樣的事情:

# RSVP Table: 
:id => primary_key 
:event_id => integer 
:user_id => integer 
:rsvp => boolean 

然後,你可以這樣做:

@eventsmy = Event.joins(:rsvp).where('rsvps.user_id = ? AND rsvps.rsvp = ?', current_user.id, false) 

這將查找當前用戶沒有回覆過到(因爲RSVP是false)當前用戶的所有事件。

+0

你在查詢中遇到了我的邏輯錯誤!謝謝:)我應該能夠用你的第二種方法解決它。 – Sayanee

+0

很高興幫助:) – iwasrobbed