2010-01-16 71 views
0

我有一個表博客是通過user_id屬於User的。在Rails中需要SQL連接的幫助

我正在使用思維獅身人面像索引博客,但我只希望它爲用戶當前活動的用戶(user.status = User :: ACTIVE)編制博客。

我有下面的代碼來創建索引,但我知道'where'子句是錯誤的。它應該是什麼?

define_index do 
    indexes title 
    indexes body 

    where "user.status = '#{User::ACTIVE}'" 
end 

更新: 至於我可以看到哪裏方法簡單地傳遞SQL代碼的數據庫引擎。看起來這應該可以通過傳入JOIN代碼來實現,但我不知道自己創建JOIN語句的SQL有多少。

第二次更新: 亂七八糟的SQL看起來JOIn必須在WHERE之前,所以使用SQL代碼不可能這樣做,除非有人知道更好。

回答

0

我不相信where子句支持這一點。它添加到幕後的SQL中,但它無法訪問Rails關聯。另一種方法是給你的博客記錄一個狀態字段,這也取決於用戶。

首先,向您的博客表添加一個狀態字段。然後,將此添加到您的用戶模型中:

before_save :update_blog_status 

protected 

def update_blog_status 
    self.blog.update_attribute(:status, self.status) 
end 

這會自動保持您的博客狀態已更新。我不知道是否有一個用戶擁有多個博客,所以如果是這種情況,只需相應地調整此代碼即可。

然後用適當的更新您的博客索引where子句:

define_index do 
    indexes title 
    indexes body 

    where "status = '#{User::ACTIVE}'" 
end 

這應該是所有你需要:)

0

我不知道很多關於獅身人面像,但只是在黑暗中嘗試了一槍..

users.status = '#{User::ACTIVE}' 
1

也許你應該嘗試用戶(表名是複數)

define_index do 
    indexes title 
    indexes body 

    # Use this line, if status is numeric 
    where "users.status = #{User::ACTIVE}" 

    # ... and this one, if it's a string 
    where "users.status = '#{User::ACTIVE}'" 
end 

畢竟,你可能想看看manual

0

您可能只需要一個虛擬屬性來確保思維獅身人面像加入博客和用戶表。不知道您的架構的細節,你可以試試:

define_index do 
    indexes title 
    indexes body 
    has user(:id), :as => :user_id 

    where "users.status = '#{User::ACTIVE}'" 
end