Я использую Devise, и для каждой созданной учетной записи пользователя я хочу создать связь, в которой:
class User < ActiveRecord::Base
belongs_to :business
end
class Business < ActiveRecord::Base
has_many :users
has_one :apt_setting
has_many :hours, :as => :hourable
end
class ApptSetting < ActiveRecord::Base
belongs_to :business
end
Таким образом, при регистрации создается связанный бизнес-объект, а с каждым бизнес-объектом - связанный ApptSettings.и объект BusinessHour создан.
В настоящее время это реализовано следующим образом:
class Admin
before_create :create_associated_records
def create_associated_records
# create the associated business object
business = Business.create(:business_name => business_name, :subdomain => subdomain, :initial_plan => initial_plan)
# retrieve the id of the new business object
self.business_id = business.id
# create the associated records
BusinessHour.default_values(business_id)
ApptSetting.default_values(business_id)
end
end
class ApptSetting < ActiveRecord::Base
belongs_to :business
def self.default_values(business_id)
# ... create record with default values
end
end
class BusinessHour < Hour
belongs_to :hourable, :polymorphic => true
def self.default_values(business_id)
# ... create record with default values
end
end
Это работает, но выглядит ли это как лучший дизайн?
Одна альтернативаЯ рассматриваю обработку удаления Admin -> create_associated_records, и вместо этого сделать это работает в Users :: Accounts :: RegistrationsController, где я переопределяю метод 'create'.Там я мог бы построить все связанные записи, установить: accepts_nested_attributes, где это уместно, затем вызвать 'save' для бизнес-объекта, что должно затем привести к генерации всех связанных записей.
Мысли о лучшем дизайне или любые другие идеи?