20

Je suis relativement nouveau dans le développement de Rails et j'ai un problème d'association mineur. J'aimerais nommer une association quelque chose de différent du modèle auquel elle est liée.Rails belongs_to association (avec: class_name) renvoie

je les 2 modèles suivants:

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 

Je construis un utilisateur comme suit:

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

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

Quand je saute dans la console que je reçois les éléments suivants:

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 

Quelqu'un peut-il expliquer pourquoi l'association admin ne renvoie pas l'utilisateur vers lequel il pointe? Merci!

+5

+1 pour inclure un bon exemple dans votre question grand homme .. Je compris enfin ce que le ': l'option class_name' de' belongs_to' signifie .. l'exemple dans le [docs] (http://guides.rubyonrails.org/v2.3.11/association_basics.html) n'était pas tout à fait clair – abbood

Répondre

46

Vous devez spécifier :class_name et :foreign_key, par exemple:

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

Je savais que ce serait une chose simple. Merci beaucoup, Jits! Je vous en suis reconnaissant! –

+0

Pas de problème. Un à surveiller dans le futur :) – Jits

+0

bravo à vous deux, j'ai finalement compris que: admin est le nom de la variable, et non le nom de la classe! – njzk2

Questions connexes