Emboîtée a beaucoup de plug-in et à travers nommé Scopes
-
24-09-2019 - |
Question
J'ai un modèle utilisateur (nom,: mot de passe,: e-mail), et le modèle de l'événement (nom,: etc) et le modèle d'intérêt (: nom) [> tout singulier <]
Alors j'ai créé deux tables de jointure -> UsersInterests et EventsInterests; chacun ne contenant pas de clé primaire, et seulement constituée de la user_id / interest_id et event_id / interest_id respectivement. [> Pluriel <]
Mes modèles Utilisez le Nested a beaucoup de travers Plugin
user.rb => has_many :users_interests
has_many :interests, :through => :users_interests
has_many :events_interests, :through => :interests
has_many :events, :through => :events_interests
event.rb => has_many :events_interests
has_many :interests, :through => :events_interests
has_many :users_interests, :through => :interests
has_many :users, :through => :users_interests
interest.rb => has_and_belongs_to_many :users
has_and_belongs_to_many :events
events_interests.rb => belongs_to :interests
belongs_to :events
users_interests.rb => belongs_to :users
belongs_to :interests
Whew..ok Je voulais donc créé un named_scope de ce trouver tous les événements qui partagent un intérêt à un utilisateur particulier. Voici quelques quelqu'un de code m'a aidé.
named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
:conditions => {:users_interests => {:user_id => user}}
}}
i exécuté à partir du contrôleur =>
@user = User.find(1)
@events = Event.shares_interest_with_user(@user)
Je reçois l'erreur:
uninitialized constant Event::EventsInterest
Quelqu'un peut-il voir ce que je foiré?
La solution
Vous devez avoir quelque chose de mal nommé le long du chemin. En bref, je dirais que vous avez un fichier ou une classe nommée de manière incorrecte. Rappelez-vous les noms de modèle MUST toujours être singulier, à la fois dans les noms de fichiers et de classe ou bien Rails ne fera pas la connexion. Une autre source de votre problème est que les arguments à belongs_to doivent aussi être singulier. Même si vous aviez obtenu les choses, la relation HABTM des intérêts avec les utilisateurs aurait jeté une erreur lors de l'exécution de la portée du nom.
Je suis en mesure de résoudre votre erreur avec les modèles suivants.
user.rb
class User < ActiveRecord::Base
has_many :users_interests
has_many :interests, :through => :users_interests
has_many :events_interests, :through => :interests
has_many :events, :through => :events_interests
end
users_interest.rb
class UsersInterest < ActiveRecord::Base
belongs_to :user
belongs_to :interest
end
interest.rb
class Interest < ActiveRecord::Base
has_many :users,:through => :users_interests
has_many :users_interests
has_many :events_interests
has_many :events, :through => :events_interests
end
** events_interest.rb
class EventsInterest <ActiveRecord::Base
belongs_to :interest
belongs_to :event
end
event.rb
class Event <ActiveRecord::Base
has_many :events_interests
has_many :interests, :through => :events_interests
has_many :users_interests, :through => :interests
has_many :users, :through => :users_interests
named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
:conditions => {:users_interests => {:user_id => user}}
}
}
end