代码之家  ›  专栏  ›  技术社区  ›  JP Richardson

如何使用rails“find”方法执行and或or查询?

  •  5
  • JP Richardson  · 技术社区  · 16 年前

    假设我有一个名为“产品”的模型,假设产品有三个字段。这些字段是'name'(类型字符串)、'cost'(类型整数)和'is-visible'(类型bool)。

    1)如何使用rails“find”方法进行搜索查询(如果有其他方法,也可以),以便搜索成本大于100且“可见”为真的所有产品?

    2)如果我们想把这个改成搜索到哪里的名字呢!=''或cost==0?

    这不是执行SQL的问题,但我想认为Rails有一种方法可以在不使用SQL的情况下执行和/或查询数据库。

    谢谢!

    3 回复  |  直到 16 年前
        1
  •  13
  •   scottd    16 年前

    您需要在find方法上使用条件选项。条件选项可以是哈希、数组或字符串。条件有很多选择,所以我建议阅读 API help 为了它。 例如,如果您想(1):

    Product.find(:all, :conditions => ['cost > ? and is_visible is true', 100])
    

    或(2)

    Product.find(:all, :conditions => ["name != '' or cost =0])
    
        2
  •  4
  •   Adam Byrtek    16 年前

    如果你想要像Linq这样的东西,你可以检查其他Ruby窗体,比如 DataMapper Sequel 提供更复杂的过滤功能。

    例如,在续集2中,你可以写:

    items.filter((:cost > 100) & (:is_visible = 1))
    

    还可以使用位“”运算符来获取或条件。

    在DataMapper中,这看起来像:

    Model.all(:cost.gt => 100, :is_visible.eq => 1)
    

    然而,有些人不喜欢这些特性是通过重载标准符号类实现的。

        3
  •  0
  •   Adam Byrtek    16 年前

    这正是SQL设计用来解决的问题,为什么不使用它呢?只需添加一个适当的:条件和你的问题就解决了。