2017-02-17 73 views
0

我在Tooltype表中有一个名为“deleted”的列,它可以是true或false。我只想要记录是错误的。我以某种方式只设法检查第二个表格(工具单元),但不是第一个(工具类型)。所以这将工作,如果我在我的toolunits表中的列“已删除”:Ruby活动记录结合条件

obj = Tooltype.joins(:toolunits).where(toolunits: {deleted: false}).distinct 

但这并不(见第三行):

get '/api/tooltypes' do 
    if params['selector'] 
    obj = Tooltype.joins(:toolunits).where(tooltype: {deleted: false}).distinct 
    else 
    obj = Tooltype.joins(:toolunits).distinct 
    end 
    obj.get_list() do |q| 
    if params['selector'] 
     q.where(deleted: false) 
    end 
    end.serialize.first 
end 

我如何使用条件对第一表?

+0

'Tooltype.joins(:toolunits)。凡(删除:假).distinct' –

+0

这是ambigous – Ursus

+0

我想你该 – Ursus

回答

0

我正在考虑两种方式

Tooltype.joins(:toolunits).where(Tooltype.table_name => {deleted: false}) 

Tooltype.joins(:toolunits).where('tooltypes.deleted = ?', false) 
+0

我刚测试过确认。当使用散列时,AR在'where'方法内预先指定表名。 –

+0

是的,哪个表名?在这个查询中有一个连接。所以两个表名。 – Ursus

+0

它使用调用类的表名。当然,我尝试了一个带有连接的查询并且名称可能有冲突。我不会在这里发布,否则 –