假设我在数据库中有5条用户记录,其中5条记录中的一条是年龄属性为30的用户。
我希望找到或创建两个age
属性为28和30的用户。
如果我这样做:
User.where(age: [28, 30])
这会给我一个年龄为30岁的用户,但它不会让我回到28岁的用户(不存在)。
或者如果我这样做
User.where(age: 28).where(age: 30)
两个年龄段都没有记录。让我们想象年龄只是一个任意属性,年龄值是一个任意值,可以是任何值。
如何根据某些属性/值组合获取所有记录,如果它们尚不存在,请创建它们吗?
答案 0 :(得分:2)
答案 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_initialize
和first_or_create
方法,它们可以连接到where子句。如果没有从where
搜索中找到记录,则会初始化/创建一个记录。
User.where("age IN (28,30)").first_or_initialize
Rails 4有一个类似的find_or_create_by
方法。