Используйте ActiveRecord, чтобы найти результат 5 вложенных таблиц

StackOverflow https://stackoverflow.com/questions/2188958

Вопрос

У меня есть модель пользователя (: name,: пароль,: электронная почта) и модель событий (: name,: etc) и процентная модель (: имя)

Затем я создал два таблица присоединения -> пользователей Interneests и Eventsinterests; Каждый не содержит первичный ключ и только состоит из только user_id / dient_id и event_id / dient_id соответственно.

Я пытаюсь использовать ActiveErecord, чтобы запросить список всех событий, где проценты. Соответствующие INVERINGS = проценты.

Я использую HAS_MANY и принадлежит отношениям с Вложенный петли плагин

Мои модели выглядят так =>

user.rb.

has_many :users_interests
has_many :interests, :through => :users_interests

Event.rb.

has_many :events_interests
has_many :interests, :through => :events_interests

Интерес

belongs_to :users , :through => :users_interests
belongs_to :events , :through => :events_interests

users_interests.rb.

belongs_to :users
belongs_to :interests

События_interests.rb.

belongs_to :interests
belongs_to :events

Если @ user = user.find (1), как бы я запросил события, которые пользователь будет заинтересован?

Я подошел к этому => @ события. Образен (: все: Условия => Событияinterests.interest_id = usersinterests.interest_id) ??

Но я получаю ошибку

undefined method `interest_id' for UsersInterests(user_id: integer, interest_id: integer):Class

UMM..WTF? Любая помощь, ребята .... Я был в этом за 4 дня

Это было полезно?

Решение

Сначала прыгайте в консоль и убедитесь, что все ваши отношения работают:

User.first.events
User.first.interests
Events.first.users
Interests.first.users
Interests.first.events
# ... and so

Просто чтобы уточнить, пользователь перечисляет его интересы, и вы хотите получить список событий, соответствующих этим интересам?

User.first.interests.collect { |interest| interest.events }.uniq

Не особо эффективно, но эффективен и легко понять.

Вы могли бы использовать User.first.interests_singular_ids чтобы получить удостоверение личности и пройти, чтобы найти () с interest_id IN(...) этот список тоже. Я не уверен, насколько быстрее это будет, хотя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top