如何在 Rails 4 中使用 "or" 链接 where 条件?
How to chain where conditions with "or" in Rails 4?
在我的 Rails 4 应用程序中,我需要找到所有具有 month
interval
或 [=30= 的 plans
] amount
的 0
。
这行不通:
class Plan < ActiveRecord::Base
def self.by_interval(interval)
where("interval = ? OR amount = ?", interval, 0)
end
end
我收到这个错误:
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'month' OR amount = 0) ORDER BY amount DESC' at line 1: SELECT `plans`.* FROM `plans` WHERE (interval = 'month' OR amount = 0) ORDER BY amount DESC
还有什么可能有用?
感谢您的帮助。
只需将参数直接传递到字符串中
def self.by_interval(interval)
where("interval = #{interval} OR amount = 0")
end
因为你不是在做一个排他性的,而是一个包容性的,我会在两个请求中做:
class Plan < ActiveRecord::Base
def self.by_interval(interval)
where(interval: interval) << where(amount: 0)
end
end
这些都是结果数组,第二组结果被注入到第一组中。我确实意识到这是两个独立的请求,因此它可能没有您想要的那样优化。
我相信使用 Rails ActiveRecord 缓存可能是一种节省性能损失的方法。我不知道在这种情况下它是否自动为您完成,或者您是否应该在执行查询之前加载完整的 table 请求。
'interval' in mysql是一个保留字(http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html)。
这样试试:
def self.by_interval(interval)
where("`interval` = ? OR amount = ?", interval, 0)
end
注意 "interval" 周围的反引号(不是引号)
在我的 Rails 4 应用程序中,我需要找到所有具有 month
interval
或 [=30= 的 plans
] amount
的 0
。
这行不通:
class Plan < ActiveRecord::Base
def self.by_interval(interval)
where("interval = ? OR amount = ?", interval, 0)
end
end
我收到这个错误:
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'month' OR amount = 0) ORDER BY amount DESC' at line 1: SELECT `plans`.* FROM `plans` WHERE (interval = 'month' OR amount = 0) ORDER BY amount DESC
还有什么可能有用?
感谢您的帮助。
只需将参数直接传递到字符串中
def self.by_interval(interval)
where("interval = #{interval} OR amount = 0")
end
因为你不是在做一个排他性的,而是一个包容性的,我会在两个请求中做:
class Plan < ActiveRecord::Base
def self.by_interval(interval)
where(interval: interval) << where(amount: 0)
end
end
这些都是结果数组,第二组结果被注入到第一组中。我确实意识到这是两个独立的请求,因此它可能没有您想要的那样优化。
我相信使用 Rails ActiveRecord 缓存可能是一种节省性能损失的方法。我不知道在这种情况下它是否自动为您完成,或者您是否应该在执行查询之前加载完整的 table 请求。
'interval' in mysql是一个保留字(http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html)。
这样试试:
def self.by_interval(interval)
where("`interval` = ? OR amount = ?", interval, 0)
end
注意 "interval" 周围的反引号(不是引号)