Ruby on rails 查找记录的所有组合
让我们想象一下,如果数据库中有5条用户记录,其中一条记录是年龄属性为30的用户 我想找到或创建两个具有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) 没有两个年龄都存在的记录。让我们假设年龄只是一个任意属性,年龄值是一个任意值,可以是任何东西 如何根据某些属性/值组合获取所有记录,如果它们还不
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))