【问题标题】:Retrieve as Model in Active Record在 Active Record 中作为模型检索
【发布时间】:2016-06-01 16:29:36
【问题描述】:

是否可以在不使用Base.connection.execute 的情况下获取任意查询的结果并将它们转换为任何ActiveRecord::Base 模型?

例如,给定这些模型:

class Foo < ActiveRecord::Base
  has_and_belongs_to_many :bars
end

class Bar < ActiveRecord::Base
  has_and_belongs_to_many :foos
end

如果我们像这样运行一个循环返回的查询,我们就会被Bar对象卡住:

Foo.first
  .bars.joins(:foos) # => ActiveRecord::Relation [Bar, Bar, Bar...]

如何进行查询以返回ActiveRecord::Relation [Foo, Foo, Foo...]

【问题讨论】:

  • 澄清一下,您想返回与第一个foo 关联的bars 关联的所有foos
  • 正确,但这只是一个示例场景。关键是我想使用 Foo 对象,而不是 Bar 对象。

标签: sql ruby-on-rails activerecord model


【解决方案1】:

试一试

Foo.joins(:bars).merge(Foo.first.bars).uniq

【讨论】:

  • 有趣...所以这适用于本示例,但是您可能希望将结果“转换”到特定模型类的一般情况呢?
  • 如果你觉得懒惰,你可以随时pluck id,在你想要的模型上做一个地方
  • 对,很公平,但是我将其拆分为多个查询。我只是有点惊讶没有像Foo.first.bars.joins(:foos).as(Foo) 这样的选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多