2009-06-04 8 views
0

J'utilise l'héritage de table unique dans mon projet. Au lieu d'expliquer plus, je vais donner le code:Rails Héritage avec problème de relations

# person_profile.rb 
class PersonProfile < ActiveRecord::Base 
    belongs_to :Person 
end 

# company_profile.rb 
class CompanyProfile < ActiveRecord::Base 
    belongs_to :Company 
end 

# person.rb 
class Person < User 
    has_one :PersonProfile 
end 

# company.rb 
class Company < User 
    has_one :CompanyProfile 
end 

Cela me semble que cela devrait fonctionner correctement. Dans l'une de mes vues, j'essaie if @person.PersonProfile == nil ce qui me semble parfaitement logique. Mais Rails n'aime pas:

Mysql::Error: Unknown column 'person_profiles.person_id' in 'where clause': SELECT * FROM `person_profiles` WHERE (`person_profiles`.person_id = 41) LIMIT 1 

Rails est à la recherche de person_id dans la table person_profiles, mais il n'y a qu'un user_id dans ce tableau. Quelle est la meilleure façon de corriger ce bug?

Répondre

2

Les modèles spécifiés dans vos associations de modèles doivent être en minuscules, chaque mot étant séparé par un trait de soulignement. Alors:

class PersonProfile < ActiveRecord::Base 
    belongs_to :person 
end 

class CompanyProfile < ActiveRecord::Base 
    belongs_to :company 
end 

class Person < User 
    has_one :person_profile 
end 

class Company < User 
    has_one :company_profile 
end 
+0

c'est vrai, alors je suppose que je dirais '@person.person_profile == nil'. Mais cela ne règle toujours pas le problème. J'ai la même erreur mysql. – Sam

0

je devais préciser le foreign_key comme « user_id » parce qu'il pense que son « person_id » par défaut.

class Person < User 
    has_one :person_profile, :foreign_key => 'user_id' 
end 

class Company < User 
    has_one :company_profile, :foreign_key => 'user_id' 
end 
4

Vous pouvez utiliser l'option :foreign_key de has_one pour spécifier la clé.

Par exemple:

has_one :person, :foreign_key => "user_id" 

Voir référence this.

Questions connexes