我们假设我有一个名为“产品”的模型。我们假设产品有三个字段。这些字段是'name'(类型字符串),'cost'(类型整数)和'is_visible'(类型bool)。
1)如何使用Rails“find”方法进行搜索查询(如果有其他方法,那很好),以便我可以搜索成本大于100且is_visible为真的所有产品?
2)如果我们想要更改此内容以搜索名称!=''OR cost == 0?
这不是一个SQL问题,但我想Rails有一种方法可以在不使用SQL的情况下对数据库进行AND / OR查询。
谢谢!
答案 0 :(得分:13)
您需要在find方法上使用conditions选项。 conditions选项可以是Hash,Array或String。条件有很多选项,所以我建议您阅读API help。 例如,如果你想要(1):
Product.find(:all, :conditions => ['cost > ? and is_visible is true', 100])
或(2)
Product.find(:all, :conditions => ["name != '' or cost =0])
答案 1 :(得分:4)
如果您想要LINQ之类的东西,可以查看提供更复杂过滤功能的替代Ruby ORM,例如DataMapper或Sequel。
例如在续集2中你可以写:
items.filter((:cost > 100) & (:is_visible = 1))
你也可以使用按位“|”运算符得到OR条件。
在DataMapper中,它将如下所示:
Model.all(:cost.gt => 100, :is_visible.eq => 1)
然而,有些人不喜欢这些功能是通过重载标准Symbol类来实现的。
答案 2 :(得分:0)
这正是SQL旨在解决的问题,为什么不使用它呢?只需添加一个合适的:条件,您的问题就解决了。