Nidificato ha molti Attraverso Plugin e named Scopes
-
24-09-2019 - |
Domanda
Ho un utente modello (: nome,: password: e-mail), e il modello di evento (: nome,: ecc) e il modello di interesse (: nome) [> tutto singolare <]
Poi ho creato due uniscono le tabelle -> UsersInterests e EventsInterests; ciascuno non contiene una chiave primaria e solo composto user_id / interest_id e event_id / interest_id rispettivamente. [> Plurale <]
I miei modelli utilizzano il annidata ha molti attraverso 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 così ho voluto creato un named_scope di che trovare tutti gli eventi che interessano la quota con un particolare utente. Ecco il codice che qualcuno mi ha aiutato con.
named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
:conditions => {:users_interests => {:user_id => user}}
}}
Quando eseguo dal controller =>
@user = User.find(1)
@events = Event.shares_interest_with_user(@user)
ottengo l'errore:
uninitialized constant Event::EventsInterest
Qualcuno può vedere quello che ho fatto un casino?
Soluzione
Si deve essere chiamato qualcosa di sbagliato lungo la strada. A colpo d'occhio direi che si dispone di un file o una classe denominata in modo non corretto. Ricordate i nomi di modello deve essere sempre singolare, sia nei nomi di file e di classe o Rails altro non farà la connessione. Un'altra fonte del problema è che gli argomenti a belongs_to devono essere singolare. Anche se avessi avuto le cose per bene, il rapporto HABTM negli interessi con gli utenti avrebbe gettato un errore quando è stato eseguito l'ambito di nome.
sono stato in grado di risolvere l'errore con i seguenti modelli.
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