2

谁能帮我写出正确的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')
4

3 回答 3

5

这三个片段之间没有区别(如果您不使用任何可以使第三个中的列名模棱两可的 JOINS)。

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

我认为第一个可读性最强。

于 2013-08-09T12:52:08.930 回答
1

第一个。

第二:只要您不需要动态添加条件,请避免链接“where”函数。

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

于 2013-08-09T12:56:57.207 回答
-1

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

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

Trustee.select(:id).where { (secret_key == seckey) & (user_id == my_user_id) &  (primary_trustee == '1') }
于 2013-08-09T13:25:57.433 回答