如何用"或"在Rails 4?

时间:2015-01-01 20:16:18

标签: ruby-on-rails ruby-on-rails-4 activerecord

在我的Rails 4应用中,我需要找到所有plans interval month amount { {1}}。

这不起作用:

0

我收到此错误:

class Plan < ActiveRecord::Base

  def self.by_interval(interval)
    where("interval = ? OR amount = ?", interval, 0)
  end

end

还有什么可行?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

&#39;间隔&#39;在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

请注意&#34; interval&#34; (不是引号)

答案 1 :(得分:1)

既然你没有做过排他性的,或者是包容性的,我会在两个请求中做到这一点:

class Plan < ActiveRecord::Base
  def self.by_interval(interval)
    where(interval: interval) << where(amount: 0)
  end
end

这些都是结果数组,第二组结果被注入第一组。我确实意识到这是两个单独的请求,所以它可能不像你想要的那样优化。

我相信使用Rails ActiveRecord缓存可能是一种节省性能的方法。在这种情况下,我不知道它是否会自动完成,或者您是否应该在执行查询之前加载完整的表请求。

答案 2 :(得分:-1)

直接将参数传递给字符串

def self.by_interval(interval)
  where("interval = #{interval} OR amount = 0")
end