Frage

Ich habe ein Benutzermodell (:name, :password, :email), ein Ereignismodell (:name, :etc) und ein Interessenmodell (:name).

Dann habe ich zwei Join-Tabellen erstellt -> UsersInterests und EventsInterests;Jeder enthält keinen Primärschlüssel und besteht nur aus der Benutzer-ID/Interessen-ID bzw. der Ereignis-ID/Interessen-ID.

Ich versuche, ActiveRecord zu verwenden, um eine Liste aller Ereignisse abzufragen, bei denen die Interest.ID von EventsInterests = Interest.ID von UsersInterests ist

Ich verwende has_many- und gehört_to-Beziehungen mit dem Nested-Loop-Plugin

Meine Modelle sehen so aus =>

user.rb

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

event.rb

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

Interesse.rb

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

user_interests.rb

belongs_to :users
belongs_to :interests

events_interests.rb

belongs_to :interests
belongs_to :events

Wenn @user= User.find(1), wie würde ich die Ereignisse abfragen, an denen ein Benutzer interessiert wäre?

Ich habe dieses => @events.find (: All,:: Condums => eventsInterests.interest_id = userInterests.interest_id) entwickelt?

aber ich bekomme den Fehler

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

ähm...wtf?Irgendwelche Hilfe, Leute ... Ich bin seit ungefähr 4 Tagen dabei

War es hilfreich?

Lösung

Gehen Sie zunächst in die Konsole und stellen Sie sicher, dass alle Ihre Beziehungen funktionieren:

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

Nur zur Klarstellung: Ein Benutzer listet seine Interessen auf und Sie möchten eine Liste der Ereignisse erhalten, die diesen Interessen entsprechen?

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

Nicht besonders effizient, aber effektiv und leicht verständlich.

Du könntest benutzen User.first.interests_singular_ids um die IDs zu erhalten und diese an eine find() mit zu übergeben interest_id IN(...) auch diese Liste.Ich bin mir jedoch nicht sicher, wie viel schneller es wäre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top