Как создать связанные записи до того, как класс "tenant" будет сохранен с помощью activ_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, когда это new_record? или лучший способ справиться с этим типом вещи?
Я довольно новичок в rails / ruby несколько месяцев назад...?
ОБНОВИТЬ
Ну, я понял, если я изменю его на "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
1 ответ
Если вы создаете нового арендатора, а затем хотите создать ряд записей, связанных с новым клиентом, вам сначала нужно будет установить текущего арендатора, или действие Act_as_tenant не позволит вам сделать это.
Ваш подход работает, но для arguments_as_tenant также есть специальный API для этого (также проверьте прочитанное мной):
Установка текущего арендатора для блока
ActsAsTenant.with_tenant(newly_created_tenant) do
# Current tenant is set for all code in this block
end
Это работает.
Однако, если вы хотите предоставить новому арендатору прямой доступ к его приложению после создания его учетной записи. Вы бы лучше войти в него и затем создать значения по умолчанию. Способ входа в него зависит от вашего решения для аутентификации.