我有一个User模型,其中languages
属性为数组(postgres)
User has_many :documents
和document belongs_to :user
我想找到用户编写的所有文档都知道英语和法语
@langs = ["English", "French"]
Document.joins(:user).where(user.languages & @langs != nil )
这不起作用。
这样做的正确方法是什么?
语言架构
t.string "languages", default: [], array: true
答案 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对象:)