Ruby on rails 查找记录的所有组合

Ruby on rails 查找记录的所有组合,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,让我们想象一下,如果数据库中有5条用户记录,其中一条记录是年龄属性为30的用户 我想找到或创建两个具有age属性28和30的用户 如果我这样做: User.where(age: [28, 30]) 这将给我一个30岁的用户,但它不会给我一个28岁的用户(不存在) 或者如果我这样做 User.where(age: 28).where(age: 30) 没有两个年龄都存在的记录。让我们假设年龄只是一个任意属性,年龄值是一个任意值,可以是任何东西 如何根据某些属性/值组合获取所有记录,如果它们还不

让我们想象一下,如果数据库中有5条用户记录,其中一条记录是年龄属性为30的用户

我想找到或创建两个具有
age
属性28和30的用户

如果我这样做:

User.where(age: [28, 30])
这将给我一个30岁的用户,但它不会给我一个28岁的用户(不存在)

或者如果我这样做

User.where(age: 28).where(age: 30)
没有两个年龄都存在的记录。让我们假设年龄只是一个任意属性,年龄值是一个任意值,可以是任何东西


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

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

User.where("age >= 28 AND age <= 30")
最后,还有
first\u或\u initialize
first\u或\u create
方法,它们可以连接到where子句。如果在
搜索中未找到任何记录,则初始化/创建一条记录

User.where("age IN (28,30)").first_or_initialize
Rails 4有一个类似的
find\u或\u create\u by
方法。

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

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

这将有助于找到。要创建一个缺少值的新用户,我相信您需要手工编写。

标题没有描述这个问题。你不是在问如何找到一个记录的组合,你是在问如何
同时在多个条件下找到或创建多个记录。我假设你的例子是假设的,因为年龄和用户对我来说没有任何意义(随机使用某个年龄段的用户?)。简言之:这是不可能的,没有捷径,没有
find\u或\u create\u by
一次性完成。从这样一个where子句中,不知道哪些选项未满足,然后创建这些选项?你能更具体地解释一下你想要实现什么吗?如果我有一个29岁的用户,这个会接受吗?只是测试了一下。会的,那不是我想要的。谢谢你的努力,这会创造一个既有记录的条件吗?一个已经在数据库中,另一个不存在?我不认为最后一个方法已经准备好创建您范围内缺少的所有内容。如果您想这样做,您需要循环遍历您想要的范围中缺少的每个值并创建它们。
User.where(age: (28..30))