Pregunta

Tengo un usuario Modelo (nombre,: contraseña,: e-mail), y el modelo de eventos (: nombre,: etc) y el modelo de interés (: nombre) [> todo singular <]

A continuación, he creado dos se unen tablas -> UsersInterests y EventsInterests; cada uno que no contenga una clave primaria y sólo compuesto por la user_id / interest_id y event_id / interest_id respectivamente. [> Plural <]

Mis modelos utilizan el anidada tiene muchos A través 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 así que quería creado un named_scope de que encontrar todos los eventos que le interesan a compartir con un usuario en particular. Aquí hay un código que alguien me ayudó con.

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

Cuando corro desde el controlador =>

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

Me sale el error:

uninitialized constant Event::EventsInterest

Puede alguien ver lo que la pata?

¿Fue útil?

Solución

Debe haber llamado algo mal en el camino. A primera vista diría que tiene un archivo o clase llamada incorrectamente. Recuerde que los nombres de modelo debe siempre ser singulares, tanto en los nombres de archivo y de clase o rieles más no hará la conexión. Otra fuente de su problema es que los argumentos a belongs_to también deben ser singulares. Incluso si se hubiera conseguido cosas bien, la relación HABTM de intereses con los usuarios habría arrojado un error al ejecutar el ámbito con nombre.

I fue capaz de resolver el error con los siguientes 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

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top