【问题标题】:A model with "has_and_belongs_to_many" -- how to do a query by a list of id?具有“has_and_belongs_to_many”的模型——如何通过 id 列表进行查询?
【发布时间】:2017-06-20 22:55:44
【问题描述】:

我有一个模型 Model1,其中包含:

has_and_belongs_to_many :child_items

是否可以通过他们的 id 列表查询child_items?比如:

model1.child_items.where(id: [1, 2, 3])

是的,我可以这样做:

ChildItem.where(id: [1, 2, 3])

但是通过Model1 会更好,因为我会有一个连接,不仅需要child_items,还需要真正属于Model1 的那些,并且可能在[1, 2, 3] 之间可能还有其他id也是。

因此,我该怎么做呢?

【问题讨论】:

  • 嘿,Mongoid 还是 ActiveRecord ?

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:
model1.child_items.where('child_items.id IN (?)', [1, 2, 3])

【讨论】:

    【解决方案2】:

    我会改用这种方法:

    model1_instance.child_items.where(child_items: { id: [1, 2, 3] })
    

    Rails 允许您将表名作为哈希键传递,然后添加您想要查询的任何参数。

    【讨论】:

    • 不是关联,而是表名。此外,您可能错过了对child_items 的呼叫,模型实例没有whereSee also.
    • 我假设 model1 是模型的一个实例,因为它是小写的,而不是模型本身。对 child_items 的缺失调用是有效的,但这并没有返回预期的模型类型。我的错,我已经更新了我的答案。
    • 关于哈希键是(或者更确切地说不是)一个关联仍然有一个令人困惑的部分。
    • 我已经更新了我的答案,使其在表名而不是关联上更加明确,并且更清楚地表明它是在实例而不是模型本身上调用的。感谢您的反馈。
    • 再一次,这个语法与关联完全没有关系,它只是一个裸表名,没有来自模型的推断。 PS:投反对票不是我的。
    猜你喜欢
    • 2013-10-10
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多