Pergunta

Eu tenho um modelo de usuário (: nome, senha ,: email) e modelo de evento (: nome, etc) e modelo de interesse (: nome) [> All Singular <

Então eu criei duas tabelas de junção -> Usuários interiores e eventos interesses; Cada um não contendo uma chave primária e composto apenas pelo user_id/interesse_id e event_id/interesse_id, respectivamente. [> plural <

Meus modelos usam o Aninhado tem muitos através do 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 Então eu queria criar um nome nomeado que encontre todos os eventos que compartilham interesse com um usuário específico. Aqui está algum código que alguém me ajudou.

named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
  :conditions => {:users_interests => {:user_id => user}}
   }}

Quando eu corro do controlador =>

@user = User.find(1) 
@events = Event.shares_interest_with_user(@user)

Eu recebo o erro:

uninitialized constant Event::EventsInterest

Alguém pode ver o que eu estraguei?

Foi útil?

Solução

Você deve ter nomeado algo errado ao longo do caminho. À primeira vista, eu diria que você tem um arquivo ou classe nomeada incorretamente. Lembre -se de nomes de modelos DEVO Sempre seja singular, tanto em nomes de arquivo quanto em classe ou em outra pessoa, não farão a conexão. Outra fonte do seu problema é que os argumentos a pertencer_to também devem ser singulares. Mesmo se você tivesse acertado as coisas, o relacionamento do HABTM em interesses com os usuários teria lançado um erro ao executar o escopo nomeado.

Consegui resolver seu erro com os seguintes modelos.

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

usuários_interest.rb

class UsersInterest < ActiveRecord::Base
  belongs_to :user
  belongs_to :interest
end

interesse.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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top