J'ai quelque chose comme ceci:Comment définir une valeur par défaut has_one dans ActiveRecord?
class User < ActiveRecord::Base
has_one :profile
end
class Profile < ActiveRecord::Base
belongs_to :user
end
user = User.new
user.profile.something #=> ERROR
Qu'est-ce qu'une bonne façon de définir un objet de profil par défaut dans ce cas? J'ai essayé ceci:
class User < ActiveRecord::Base
default_scope :include => :profile
has_one :profile
def after_initialize
self.profile ||= Profile.new(:user => self)
end
end
... mais cela crée N + 1 requêtes. Des idées?
Mise à jour
C'est ce que j'ai maintenant, tout fonctionne bien, toujours à la recherche quelque chose de mieux:
class User < ActiveRecord::Base
default_scope :include => :profile
has_one :profile, :autosave => true
def after_initialize
self.profile = Profile.new(:user => self) if new_record?
end
end
De cette façon, vous allez avoir un profil à chaque fois que vous avez enfin votre create
utilisateur. Sinon, le seul cas est un new_record?
.
Je pense à ceux-ci, mais en fait pour mon spécifi Dans le cas contraire, la classe de profil dépend de la sous-classe: 'class Admin