2016-12-23 2 views
0

Ich habe eine Profile, die published sein kann. A profile gehört zu :user und has_many :ratings.Wie sortiere ich nach einer Zuordnung eines bestimmten Benutzers?

A User has_one :profile und has_many :ratings.

A Rating belongs_to :profile && belongs_to :user.

Dies sind die Schemata für die oben genannten Modelle:

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 
# 

Was ich tun möchte, ist, alle Profile zu finden, geordnet nach 1 rating Attribut .... z. Alle veröffentlichten Profile nach passing (höchste bis niedrigste).

Ich habe versucht, so etwas wie dieses:

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

Aber das macht mir nicht immer die Profile in der Reihenfolge ich erwarte.

Also, wie mache ich diese Abfrage, die mir ermöglicht, diese Profile nach all diesen Bewertungen entsprechend eingestuft werden?

Edit 1

Bitte beachten Das Wichtigste dabei ist, dass ich die Bewertungen auf ein Profil von einem bestimmten Benutzer links finden müssen.

In meiner Abfrage oben, coach = User.find(7).

Also jeder User hinterlässt eine Reihe von ratings auf vielen profiles.

Was ich tun möchte, ist filtern alle profiles, die eine spezifische Bewertung haben (sagen wir speed) und um diese Profile, um die Empfindlichkeit von der höchsten bis zur niedrigsten (aber das benutzerspezifische ist).

+0

mich korrigieren, wenn ich falsch bin. Ich sehe deine Logik als Konflikt. Bewertung (profile_id, user_id). Es bedeutet, dass die Beziehung Benutzer-Profil ist n-n. Aber Sie legen Beziehung Profil-Benutzer ist 1-1 vor. –

+0

Benutzer-zu-Profil ist 1-1, Bewertung zu Profil ist n-n. Wie hast du User-Profile als n-n bekommen? Das einzige, was wahr sein könnte, ist, wenn ich ein 'has_many ratings_users durch:: rating', nein? – marcamillion

+0

'User-Rating 1-n',' Profil-Rating 1-n' => 'User-Profil n-n' –

Antwort

2

Verwenden einer Verknüpfung:

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

Wie finde ich die Bewertungen für den verknüpften Benutzer? "Coach" ist ein Benutzer in meiner ursprünglichen Abfrage. Sehen Sie sich die aktualisierte Frage an, um mehr Klarheit darüber zu bekommen, wonach ich suche. – marcamillion

+0

Bro .... wow ... perfekt. Genau das habe ich gesucht. Klappt wunderbar. So einfach und sauber. Ich kann nicht glauben, dass ich nie darüber nachgedacht habe "wo (Bewertungen: ...)". – marcamillion

Verwandte Themen