У меня есть Profile
, который может быть published
. A profile
принадлежит_:user
и has_many :ratings
.Как сортировать по ассоциации конкретного пользователя?
A 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))
Но это не всегда дает мне профили в порядке, я ожидал.
Итак, как мне сделать этот запрос, который позволяет мне получить эти профили, оцененные по всем этим рейтингам соответственно?
Edit 1
Обратите внимание Главное здесь в том, что мне нужно найти рейтинги профиля, оставленного конкретным пользователем.
По моему запросу выше, coach = User.find(7)
.
Таким образом, каждый User
оставляет кучу ratings
на многих profiles
.
Что я хочу сделать, это отфильтровать все profiles
, которые имеют определенный рейтинг (скажем speed
) и закажите эти профили, по рейтингу скорости от самого высокого до самого низкого (но это зависит от пользователя).
Поправьте меня, если я ошибаюсь. Я вижу, что ваша логика кажется путаной. Рейтинг (profile_id, user_id). Это означает, что пользовательский профиль является n-n. Но вы установили профиль отношений - пользователь 1-1 раньше. –
Пользовательский профиль 1-1, рейтинг для профиля n-n. Как вы получили профиль пользователя n-n? Единственное, что может быть правдой, - это установить «has_many rating_users через:: рейтинги», нет? – marcamillion
'User-Rating 1-n',' Profile-Rating 1-n' => 'Пользовательский профиль n-n' –