Я пытаюсь создать приложение, в котором пользователи ('current_user') оценивают совместимость между двумя другими пользователями ('user1' и 'user2'). Они могут оценивать совместимость как положительно, так и отрицательно: оценка «совместимости» двух пользователей создает два ресурса одного и того же класса («positive_connection» и «inverse_positive_connection» - для двунаправленности), а оценка их «несовместимыми» также создает два ресурса («absolute_connection»). 'и' inverse_negative_connection '). Таким образом, существуют модели для positive_connection, absolute_connection и пользователя.
Каждый рейтинговый ресурс принадлежит как пользователю, который его создал, так и пользователям, связанным с ним. Важно иметь как положительные, так и отрицательные оценки.
Это моя проблема: на каждой странице пользователя (@user
) я хочу отображать отдельные списки:
пользователей, которые overall_positively_connected_to(@user)
(т.е. positive_connections.count > negative_ratings.count
) и
пользователей, которые overall_negatively_connected_to(@user)
(т.е. negative_connections.count > positive_ratings.count
).
Кажется, я не могу написать метод class , который извлекает только тех пользователей, которые имеют «совместимый» или «несовместимый» рейтинг
.
После прочтения учебника Майкла Хартла по рельсам (я совершенно новичок во всем этом), я думаю, мне нужно написать что-то вроде этого в модели User:
class User < ActiveRecord::Base
def self.that_are_compatible_with
User.overall_positively_connected_to(user)
end
.
.
.
EDIT
Начиная абсолютно без знания SQL-запросов, я написал эти два метода класса для поиска пользователей, которые отрицательно и положительно связаны с @user (соответственно):
.
.
.
def self.with_neg_connections_to(user)
joins(:negative_connections).
where(:negative_connections => {:user_a_id => user})
end
def self.with_pos_connections_to(user)
joins(:positive_connections).
where(:positive_connections => {:user_a_id => user})
end
Но это не сильно помогает. Что мне нужно, это метод, который получает пользователей overall_positively_connected_to(user)
. Я предполагаю, что метод будет включать в себя два соединения и что-то вроде этого:
def self.overall_positively_connected_to(user)
joins(:positive_connections).joins(:negative_connections).
where((:negative_connections => {:user_a_id => user}).count > (:positive_connections => {:user_a_id => user}).count)
end
Но здесь я полностью застрял: это явно не правильно. Я не могу найти другие примеры, как это нигде ...
Любая помощь по этому вопросу была бы великолепна, поскольку я понятия не имею, когда речь идет о SQL-запросах. Дайте мне знать, если нужно больше кода. Заранее спасибо!