【问题标题】:Casting a ActiveRecord collection from one type to another将 ActiveRecord 集合从一种类型转换为另一种类型
【发布时间】:2011-06-12 21:16:17
【问题描述】:

假设我有两个 Rails ActiveRecord 模型,CarType(汽车的品牌/型号)和 Car(CarType 的实例)。 Car *belongs_to* CarType 和 CarType *has_many* Cars。

我想要一个汽车列表,但只有唯一的 CarTypes(结果中没有重复的 CarTypes)。

基本上,我想要以下结果:

CarType.find(:all, :include => [:cars])

...但转换为 Car 对象的集合。我怎样才能做到这一点?

编辑

我开始通过执行上面的CarType.find 语句来解决这个问题,对Rails 生成的SQL 代码进行逆向工程(Rails 实际上会生成两个SQL 语句),然后使用Car.find_by_sql,但我觉得解决方案变得非常庞大。

【问题讨论】:

  • 所以您只想为每个 CarType 检索一辆汽车?
  • 是的,正确:每个 CarType 只有一辆汽车。附带问题:排序顺序会影响为每个 CarType 选择哪辆车(因为可以有多个)?

标签: ruby-on-rails activerecord casting find unique


【解决方案1】:

我认为,Cars.group("cartype_id") 是您正在寻找的。并回答您的附带问题,在分组之后应用 afaik 排序。

【讨论】:

  • 几乎!这解决了它:Car.find(:all, :include => [:car_type], :group => :car_type_id)。谢谢@bassneck!
  • 有趣...我在我的项目中检查了我的代码,它工作正常。但无论如何,很高兴你把它整理出来。干杯:)
猜你喜欢
  • 2021-01-11
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多