2014-03-06 37 views
1

我有一個用戶模型具有languages屬性作爲一個數組(Postgres的)使用凡在聯想的屬性條件

一個User has_many :documentsdocument belongs_to :user

我想找到由用戶撰寫的所有文檔都知道英文和法文

@langs = ["English", "French"] 

Document.joins(:user).where(user.languages & @langs != nil) 

這不起作用。

這樣做的正確方法是什麼?

架構的語言

t.string "languages",    default: [],         array: true 
+0

您是否收到錯誤或者錯誤的結果? – slapthelownote

+0

錯誤未定義的用戶。 –

回答

1

試試這個:

Document.joins(:user).where("user.languages @> ARRAY[?]::varchar[]", @langs) 

這應該工作我想在我的模型與相似的結構。

0
User.where('languages in (?)', @langs).map(&:documents).flatten.uniq 
+0

這將導致一個數組而不是關係 –

0

與@一個完整的組合Alex的答案是:

@langs = ['English', 'French'] 

Document.joins(:user).where('user.languages in (?)', @langs) 

這將生成文檔對象(S)那場比賽(ES)與標準:)

+0

這不適用於我..'''PG :: SyntaxError:錯誤:語法錯誤在或接近「。」 LINE 1:...「ON」users「。」id「=」documents「。」user_id「WHERE(user.languages ...''' –

+0

@NickGinanto,給出完整的錯誤信息。對於生成的完整sql查詢 – alex

+0

我懷疑問題在於「用戶」或「用戶」,「文檔」或「文檔」,「語言」或「語言」......因爲我在rails控制檯中測試過,它是工作...雖然我使用MySQL而不是PGSQL,但應該工作沒有問題...嘗試'(')'users.languages在(?)' –

1

也許你需要在數據庫的數組中的「包含」操作:

Document.joins(:user).where("user.languages @> ARRAY[?]", @langs) 
+0

這給了一個錯誤'''PG :: SyntaxError:錯誤:語法錯誤在或「near」。「 LINE 1:...」ON「users」。「id」=「documents」。「user_id」WHERE(user.languages ...''' –

+0

您可以發佈您的數據庫模式嗎? – slapthelownote

+0

I添加語言部分 –