2017-09-13 81 views
0

如何让sql只有条件?Rails的activerecord在哪里sql

Lead.where(status: 1).to_sql

SELECT `leads`.* FROM `leads` WHERE `leads`.`status` = 1

我只需要条件的SQL。即, leads.`status` = 1

此外我有默认范围。从我只需要该范围为sql

+2

我觉得有一些资料,这个问题缺少。你想通过这个实现什么?如果你只需要SQL片段,你可以很容易地把它写成一个字符串。如果你想执行SQL,那么你根本不需要to_sql。 – AJFaraday

+0

只是'leads.status = 1'没有意义。你将如何解释加入和别名表的信息? – kiddorails

+0

@AJFaraday它只是一个例子。我必须执行复杂的SQL。但取决于用户角色,范围将发生变化。所以我需要将该范围转换为SQL。然后,只有我可以将该范围sql添加到我的原始sql。 –

回答

1

您可以使用Arel::SelectManager#where_sql

>> Lead.where(status: 1).arel.where_sql 
=> "WHERE \"leads\".\"status\" = $1" 
+0

是否有任何选项来获得唯一的条件字符串,不** ** WHERE –

+0

您可以编写自定义访问者来执行此操作:https://gist.github.com/tcopeland/9715f83c7cb516209491996bf2442476 –