根据条件在rails中连接表

时间:2014-07-26 16:21:32

标签: ruby-on-rails

我对rails很新,我有一个关于在rails中加入两个表的问题

我有两张桌子: -

TableA(Id,ancestry_depth,...),其中使用祖先gem创建了深度 表B(Id,TableA_id,TableC_id)

我想用一些条件提取TableA_id列,我的sql语句看起来像这样

(select * from TableB
join TableA
on TableA.Id = TableB.TableA_id
where ancestry_depth = 5)

我无法将此查询转换为rails query

请帮我解决在rails4.1.2

中执行此操作的最佳方法

1 个答案:

答案 0 :(得分:0)

你可能想尝试这样的事情:

# TableB.joins(<association name>).where(<table name>: { ancestry_depth: "5" })
TableB.joins(:tablea).where(tableas: { ancestry_depth: "5" })

由于您使用的是Rails 4,您可能还有兴趣查看merge选项,该选项允许您在该模型的作用域中定义TableA条件,使它们与TableB逻辑分开。有点像...

# In TableA class:
scope :my_ancestry_scope, -> { where(ancestry_depth: "5") }

# The join query:
TableB.joins(:tablea).merge(TableA.my_ancestry_scope)