查找记录的所有组合

时间:2015-01-28 15:23:54

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

假设我在数据库中有5条用户记录,其中5条记录中的一条是年龄属性为30的用户。

我希望找到或创建两个age属性为28和30的用户。

如果我这样做:

User.where(age: [28, 30])

这会给我一个年龄为30岁的用户,但它不会让我回到28岁的用户(不存在)。

或者如果我这样做

User.where(age: 28).where(age: 30)

两个年龄段都没有记录。让我们想象年龄只是一个任意属性,年龄值是一个任意值,可以是任何值。

如何根据某些属性/值组合获取所有记录,如果它们尚不存在,请创建它们吗?

2 个答案:

答案 0 :(得分:2)

您实际上可以在range条件下使用where

User.where(age: (28..30))

这将有助于发现。要创建一个年龄缺失值的新用户,我相信您需要手动编写代码。

答案 1 :(得分:1)

如果需要范围,可以在where子句中放入原始SQL语句,如下所示:

User.where("age >= 28 AND age <= 30")

如果您想要一组特定的年龄,可以使用where子句中的列表:

unless User.where("age IN (28,30)").length > 0
    # Code to create user with the age you want
end

最后,还有first_or_initializefirst_or_create方法,它们可以连接到where子句。如果没有从where搜索中找到记录,则会初始化/创建一个记录。

User.where("age IN (28,30)").first_or_initialize

Rails 4有一个类似的find_or_create_by方法。