[英]Rails: getting an average from all the instances of a model from birthdate
[英]Rails 4: Return all instances from a where call
我在发票表中有一个状态整数列
def change
create_table :invoices do |t|
t.integer :status
end
end
我找到这样的发现
def find_status(status)
Invoice.where(status: status)
end
当我想查找状态为1的所有发票时,这非常好。
但是,有时我想使用find_status方法返回所有发票吗?
我可以用if语句解决这个问题,但是我的问题是;
我可以将某些东西传递给find_status方法,该方法将返回所有发票吗?
PS:复习此问题后,我了解到是否有人会提出针对该问题的其他解决方案的建议。 请将此问题视为“概念教授的问题”
您可以将数组或范围放入方法调用中,前提是您没有数百种状态,但无法抵抗诱惑-如果您想要它们全部,我将避免方法调用而只做Invoice.all
这几乎是不可能做到这一点的where
不支持在这种情况下通配符和选项,如巨大的范围内产生非常不干净的代码。 但是您可以使用Invoice.all
调用而不是调用此方法。
如果您坚持对两者使用相同的方法,则可以像下面那样更改find_status方法。
def find_status(status = nil)
status.nil? ? Invoice.all.to_a : Invoice.where(status: status)
end
绝对不可能! 希望我们能够做到,这将是一个真正的安全问题。 不过,如果您不介意缺乏安全性,仍然可以编写类似
def find_status(status)
Invoice.where("status = #{status}")
end
接着
find_status(1) #=> All invoices with the status 1
find_status('status') #=> All invoices :)
但是再次,我所做的就是利用缺乏安全性! 如您所说,您可以轻松地使用if或if? 条件陈述
其实! 您可以这样做:
find_status Invoice.pluck(:status)
它的工作原理没有改变您的方法:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.