У меня есть модель пользователя, и я хочу создать дружбу между пользователями. Я достиг этого с помощью has_and_belongs_to_manyBi-Directional has_and_belongs_to_many на одной модели в Rails
has_and_belongs_to_many :friends, class_name: 'User', foreign_key: :friend_id
И у меня есть таблица для этой ассоциации:
create_table :users_users do |t|
t.uuid :user_id, null: false
t.uuid :friend_id, null: false
t.timestamps
end
Когда я получаю друг через user.friends мне нужно иметь ассоциацию, где текущий пользователь находится в user_id колонки или friend_id. Мое текущее решение возвращает мне только записи, где пользователь находится в таблице friend_id.
У меня есть два решения для этого:
- повторяющиеся записи [{идентификатор_пользователя: 1, friend_id: 2}, {идентификатор_пользователя: 2, friend_id: 1}]
- Override метод user.friends и возврат мой пользовательский запрос
Оба решения не являются элегантными и оптимальными.
Об этом я читал article, но решение этой статьи очень сложно.
Есть ли другие решения этой проблемы? Я использую рельсы. 5.
Недостатком метода, в отличие от ассоциаций и областей, является то, что в некоторых ситуациях их сложнее повторно использовать при использовании 'merge' и связанных с ним механизмов. –
@ma_il согласен. Я не поклонник этой техники, но она работает. –