按其他created_at记录列排序记录列表

时间:2016-05-24 05:54:03

标签: sql ruby-on-rails postgresql ruby-on-rails-4

在我的表格中: 用户可以投票到战斗记录 战斗记录有很多投票记录(用户使用user_id进行投票)

我想通过每场战斗的投票记录的created_at列来命令用户投票的战斗。

英文版 - 我希望在投票给他们的时候获得用户投票的战斗清单。

我当前的代码 - 问题是这段代码返回一个数组,我想按顺序:

scope :picked, -> (user_id) { where("battles.id IN (SELECT DISTINCT(battle_id) FROM votes WHERE user_id = ?)", user_id)
                                    .sort_by { |b| b.votes.find_by(user_id: user_id ).created_at }.reverse }

1 个答案:

答案 0 :(得分:0)

在指定has_many关联时,您必须传递阻止选项 假设您有以下型号:

Vote < ActiveRecord::Base
 belongs_to :user
 belongs_to :battle
end  

Battle < ActiveRecord::Base

end

用户模型应该是这样的:

User < ActiveRecord::Base
  has_many :votes, -> { order(created_at: :desc) } # Ordering goes here
  has_many :battles, through: :votes
end    

然后你直接查询战斗:
User.first.battles # Scoped by votes.created_at