У меня есть что-то вроде этого:
class User < ActiveRecord::Base
has_one :profile
end
class Profile < ActiveRecord::Base
belongs_to :user
end
user = User.new
user.profile.something #=> ERROR
Каков правильный способ установки объекта профиля по умолчанию в этом случае? Я пробовал это:
class User < ActiveRecord::Base
default_scope :include => :profile
has_one :profile
def after_initialize
self.profile ||= Profile.new(:user => self)
end
end
... но это создает N + 1 запросов. Есть идеи?
Обновление
Это то, что у меня сейчас, работает нормально, все еще ищу что-то получше:
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
Таким образом, у вас будет профиль, когда вы наконец create
станете вашим пользователем. В противном случае единственным случаем является new_record?
.