【问题标题】:Rails 4 + ActiveRecord: group_by on column from different modelRails 4 + ActiveRecord:来自不同模型的列上的 group_by
【发布时间】:2015-03-28 21:43:27
【问题描述】:

我有这些模型:

class User < ActiveRecord::Base
  has_many :car_votes
  has_many :cars
end
class Car < ActiveRecord::Base
  belongs_to :user
  has_many :car_votess
end
class GameVote < ActiveRecord::Base
  belongs_to :user
  belongs_to :car
end

如果我想显示用户投票的汽车(并按用户投票汽车的日期对输出进行分组):

@voted_cars = @user.car_votes.order('car_votes.created_at DESC').group_by { |r| r.created_at.to_date }

因此,输出是用户投票的所有汽车,按用户投票游戏的天数分组。

但我现在想根据car_votes.created_at 对输出进行分组,但根据cars.created_at。如何做到这一点?

提前谢谢你。

【问题讨论】:

  • 在 Car 类中,您有“has_many :car_votess”,这只是这里或您的原始代码中的错字吗?还有 CarVote 课程吗?我只看到 GameVote。
  • 对不起,这只是一个错字。

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord model


【解决方案1】:

如果您的关联允许您这样做(在 Rails 控制台上尝试):

@c = CarVote.first
puts @c.car.created_at

你得到一个返回值而不是一个错误,那么你可以这样做:

@voted_cars = @user.car_votes.order('car_votes.created_at DESC').group_by { |r| r.car.created_at.to_date }

【讨论】:

  • 您应该能够使用任何有效的关联进行遍历。
  • 这很奇怪 - 在将问题发布到 SO 之前,我已经尝试过这种方法,但当时它没有用......(也许我修改了模型)。无论如何,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多