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