Пример ...Как создать связанные записи перед тем, как класс «арендатор» будет сохранен с act_as_tenant gem?
У меня есть класс под названием client
, который является моей моделью tenant
.
У меня есть связанные записи для сохранения вместе с каждым новым client
, который создается. Назовем их tasks
.
Я создал after_initialize
обратного вызова внутри client
, который вызывает метод, называемый build_defaults
, который делает следующее ...
def build_defaults
self.tasks.build(
Task.new({
:name => 'task 1',
:description => 'task 1 desc',
:view_module => 'task_1_template'
}),
Task.new({
:name => 'task 2',
:description => 'task 2 desc',
:view_module => 'task_2_template'
}),
Task.new({
:name => 'task 3',
:description => 'task 3 desc',
:view_module => 'task_3_template'
}),
Task.new({
:name => 'task 4',
:description => 'task 4 desc',
:view_module => 'task_4_template'
}),
Task.new({
:name => 'task 5',
:description => 'task 5 desc',
:view_module => 'task_5_template'
})
)
end
task
класс настроен как acts_as_tenant :client
Когда я иду сделать @client = new Client(:name => "Test Client")
Это повышает ActsAsTenant::Errors::NoTenantSet: ActsAsTenant::Errors::NoTenantSet
Есть ли способ условно обходить проверку act_as_tenant, когда это новый_запись? или лучший способ справиться с этим типом вещей?
Я довольно новичок в рельсах/рубине на несколько месяцев назад ...?
UPDATE
Ну, я понял, если я изменить его на «after_create» и установить ActsAsTenant.current_tenant = self
в рамках метода я могу сделать self.tasks.create!
звонки ... но не уверен, что если переопределение ActsAsTenant.current_tenant является хорошим идея?
after_create :build_defaults
def build_defaults
ActsAsTenant.current_tenant = self
self.tasks.create!({
:name => 'Facebook > Page Like',
:description => 'Request that they like your page.',
:view_module => 'facebook_page_like'
})
self.tasks.create!({
:name => 'Facebook > Share',
:description => 'Share a link on Facebook',
:view_module => 'facebook_share_link'
})
self.tasks.create!({
:name => 'Twitter > Tweet',
:description => 'Post a tweet on a user behalf.',
:view_module => 'twitter_tweet'
})
self.tasks.create!({
:name => 'Twitter > Follow',
:description => 'Follow the company twitter user.',
:view_module => 'twitter_follow'
})
self.tasks.create!({
:name => 'Giveaway Share',
:description => 'This allows you to earn 5 extra entries by re-sharing this giveaway.',
:view_module => 'giveaway_share'
})
end
Спасибо Эрвин, это очень полезно и было тем, что я искал. Продолжайте делать то, что вы делаете! –