我的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();
}
可以是Profile
。 published
belongs_to profile
和:user
。
has_many :ratings
User has_one :profile
和has_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
并按照从最高到最低的速度等级对这些配置文件进行排序(但这是用户特定的)。
答案 0 :(得分:2)
使用联接:
Profile.published
.joins(:ratings)
.where(ratings: { user_id: coach.id } )
.order('ratings.passing')