查找记录的所有组合
Finding all combinations of record
假设我在数据库中有 5 条用户记录,这 5 条记录之一是年龄属性为 30 的用户。
并且我想查找或创建两个具有 age
属性 28 和 30 的用户。
如果我这样做:
User.where(age: [28, 30])
这会给我一个 30 岁的用户,但不会给我 28 岁的用户(不存在)。
或者如果我这样做
User.where(age: 28).where(age: 30)
没有两个年龄都在场的记录。假设年龄只是一个任意属性,年龄值是一个任意值,可以是任何值。
我如何根据某些 attributes/values 组合获取所有记录,如果它们尚不存在,请创建它们?
如果你想要一个范围,你可以在 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
搜索没有找到记录,则一条是 initialized/created.
User.where("age IN (28,30)").first_or_initialize
Rails4有类似的方法find_or_create_by
。
你实际上可以使用一个range on the where条件:
User.where(age: (28..30))
这将有助于查找。要创建一个年龄缺失值的新用户,我相信您需要手动编码。
假设我在数据库中有 5 条用户记录,这 5 条记录之一是年龄属性为 30 的用户。
并且我想查找或创建两个具有 age
属性 28 和 30 的用户。
如果我这样做:
User.where(age: [28, 30])
这会给我一个 30 岁的用户,但不会给我 28 岁的用户(不存在)。
或者如果我这样做
User.where(age: 28).where(age: 30)
没有两个年龄都在场的记录。假设年龄只是一个任意属性,年龄值是一个任意值,可以是任何值。
我如何根据某些 attributes/values 组合获取所有记录,如果它们尚不存在,请创建它们?
如果你想要一个范围,你可以在 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
搜索没有找到记录,则一条是 initialized/created.
User.where("age IN (28,30)").first_or_initialize
Rails4有类似的方法find_or_create_by
。
你实际上可以使用一个range on the where条件:
User.where(age: (28..30))
这将有助于查找。要创建一个年龄缺失值的新用户,我相信您需要手动编码。