20

Soy relativamente nuevo en el desarrollo de Rails y tengo un problema de asociaciones menores. Me gustaría nombrar una asociación algo diferente al modelo al que está vinculado.Rails belongs_to association (with: class_name) returns nil

tengo las siguientes 2 modelos:

class User < ActiveRecord::Base 
    has_many :events 
end 

class Event < ActiveRecord::Base 
    belongs_to :admin, :class_name => "User" # So we can call event.admin to retrieve the User who owns this Event 
end 

que construyo un usuario de la siguiente manera:

event = event.create! :title => "New Event" 

user = User.create! :username => "thinkswan" 
user.events << event 
user.save 

Cuando lúpulo en la consola recibo el siguiente:

irb> user = User.find(1) 
irb> user.events 
=> [#<Event id: 1, title: "New Event", user_id: 1, created_at: "2011-06-09 06:41:09", updated_at: "2011-06-09 06:41:10">] 

irb> event = Event.find(1) 
irb> event.user_id 
=> 1 
irb> event.admin 
=> nil 

¿Alguien puede explicar por qué la asociación admin no devuelve el usuario al que apunta? ¡Gracias!

+5

+1 para la inclusión de un buen ejemplo en su hombre de gran pregunta .. finalmente entendí lo que el ': class_name' opción de' BELONGS_TO' significa ... el ejemplo en [docs] (http://guides.rubyonrails.org/v2.3.11/association_basics.html) no estaba del todo claro – abbood

Respuesta

46

es necesario especificar tanto :class_name y :foreign_key, por ejemplo:

belongs_to :admin, :class_name => "User", :foreign_key => "user_id" 
+0

Sabía que sería algo simple. Muchas gracias, Jits! ¡Lo aprecio! –

+0

No hay problema. Uno a tener en cuenta en el futuro :) – Jits

+0

saludos a los dos, finalmente entendí que: admin es el nombre de la variable, ¡y no el nombre de la clase! – njzk2

Cuestiones relacionadas