使用IN和subselect选择Rails3和Arel

时间:2010-08-12 19:49:50

标签: ruby-on-rails arel

我有一张名为翻译的表格。 (还有一个相应的ActiveRecord类)。 该表包含以下字段 id,key和value

我想选择密钥与给定查询匹配的所有翻译+与查询不匹配的所有翻译,但是使用与查询匹配的翻译共享密钥。

生成的SQL看起来像这样:

SELECT * FROM TRANSLATIONS where key in
    (select key from Translations where value like '%some search%')

我尝试了一些事情,但我似乎无法弄明白。 关于如何在Arel中表达这一点的任何想法?

2 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

t = Table(:translations)
c = t.where(t[:value].matches('%some search%')).project(:key)
t.where(t[:key].in(c))

答案 1 :(得分:3)

与@valodzka类似,但在:键符号

周围添加“t [....]”
t = Table(:translations)
c = t.where(t[:value].matches('%some search%')).project(t[:key])
t.where(t[:key].in(c))