如何对特定用户的关联进行排序?

时间:2016-12-23 08:53:11

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

我的ItemPress: function(oEvent) { var detailDialog = this.getView().byId("DetailDialog"); var that = this; var view = this.getView(); var path = oEvent.getParameter("listItem").getBindingContext().getPath(); var oDummyController = { formatter: function(gendr) { switch (gendr) { case "M": return 0; case "F": return 1; } }, closeDialog: function() { detailDialog.close(); } }; if (!detailDialog) { detailDialog = sap.ui.xmlfragment(view.getId(), "Demo1.view.DetailDialog", oDummyController); } var jSonModel = new sap.ui.model.json.JSONModel(); function fnSuccess(oData, oResponse) { jSonModel.setData(oData); } var oModel = view.getModel(); oModel.read(path, { success: fnSuccess }) //Set data for dialog this.getView().byId("__formDetail").setModel(jSonModel); detailDialog.open(); } 可以是Profilepublished belongs_to profile:user

has_many :ratings

User has_one :profilehas_many :ratings

A Rating belongs_to :profile && belongs_to :user

这些是上述模型的模式:

Profile.rb

# == Schema Information
#
# Table name: profiles
#
#  id                      :integer          not null, primary key
#  first_name              :string
#  last_name               :string
#  created_at              :datetime         not null
#  updated_at              :datetime         not null
#  user_id                 :integer

User.rb

# == Schema Information
#
# Table name: users
#
#  id                     :integer          not null, primary key
#  email                  :string           default(""), not null
#  created_at             :datetime         not null
#  updated_at             :datetime         not null
#  first_name             :string
#  last_name              :string

Rating.rb

# == Schema Information
#
# Table name: ratings
#
#  id         :integer          not null, primary key
#  speed      :integer          default(0)
#  passing    :integer          default(0)
#  tackling   :integer          default(0)
#  dribbling  :integer          default(0)
#  profile_id :integer
#  user_id    :integer
#  created_at :datetime         not null
#  updated_at :datetime         not null
#

我想要做的是找到按1 rating属性排名的所有个人资料....例如。所有已发布的个人资料按passing排名(从最高到最低)。

我试过这样的事情:

Profile.published.where(id: coach.ratings.order(passing: :desc).pluck(:profile_id))

但是,这并不总是按照我期望的顺序给我配置文件。

那么如何进行此查询,以便我可以相应地按所有这些评级对这些个人资料进行排名?

修改1

请注意这里的关键是我需要在特定用户留下的个人资料中找到评分。

在上面的查询中,coach = User.find(7)

因此,每个User会在许多ratings上留下一堆profiles

我想要做的是过滤具有特定评级(例如profiles)的所有speed并按照从最高到最低的速度等级对这些配置文件进行排序(但这是用户特定的)。

1 个答案:

答案 0 :(得分:2)

使用联接:

Profile.published
  .joins(:ratings)
  .where(ratings: { user_id: coach.id } )
  .order('ratings.passing')