在Ruby中编写Where AND condition查询的正确方法在哪里?

时间:2013-08-09 12:50:30

标签: ruby-on-rails activerecord

谁能帮我写出正确的WHERE AND条件?或者如果它是对的,有什么区别?

1

get_primary_status = Trustee.select(:id).where(:secret_key => seckey, :user_id => user_id, :primary_trustee => '1')

2

get_primary_status = Trustee.select(:id).where(:secret_key => seckey).where(:user_id => user_id).where(:primary_trustee => '1')

3

get_primary_status = Trustee.select(:id).where('secret_key = (?) AND user_id = (?) AND primary_trustee = (?)', seckey, user, '1')

3 个答案:

答案 0 :(得分:5)

这三个片段之间没有区别(如果你不使用任何可能使第三个列中的列名不明确的JOINS)。

您可以通过在Rails控制台中调用它们并查看生成的SQL代码来确认它。

我认为第一个是最具可读性的。

答案 1 :(得分:1)

第一个。

For 2nd:只要你不需要动态添加条件,就可以避免将'where'函数链接起来。

对于第三种:在某些情况下,原始SQL可能是个好主意。但是如果你将SQLite用于原型,PostgreSQL用于生产呢?是的,他们使用SQL语言作为标准,但Arel提供了良好的抽象。

答案 2 :(得分:-1)

我建议使用Squeel gem,即使ActiveRecord在这里工作正常,如果你在查询中有多个OR和AND,那么命令并不总是非常易读

这是您的请求在Squeel中的外观

Trustee.select(:id).where { (secret_key == seckey) & (user_id == my_user_id) &  (primary_trustee == '1') }