使用Where on association的属性条件

时间:2014-03-06 06:55:30

标签: sql ruby-on-rails postgresql ruby-on-rails-4 where-clause

我有一个User模型,其中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

4 个答案:

答案 0 :(得分:1)

也许你需要对数组中的数组进行“包含”操作:

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

答案 1 :(得分:1)

试试这个:

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

我应该尝试使用类似结构的模型。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

@ alex答案的完整组合将是:

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

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

这将生成与标准匹配的Document对象:)