example...
我有一个名为client
的类,这是我tenant
模型。
我有关联的记录要与创建的每个新client
一起保存。让我们称它们为tasks
.
我在 client
内部创建了一个after_initialize
回调,该回调调用一个名为 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
有没有办法在new_record时有条件地绕过acts_as_tenant的检查? 还是处理此类事情的更好方法?
几个月前,我对轨道/红宝石相当陌生...?
更新
好吧,我想通了,如果我将其更改为"after_create"并在我可以执行self.tasks.create!
调用的方法中设置ActsAsTenant.current_tenant = self
......但不确定覆盖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
如果创建新租户,然后想要创建与新客户端关联的多个记录,则首先需要设置当前租户,否则acts_as_tenant将不允许这样做。
您的方法有效,但acts_as_tenant也有特定的 API(另请查看自述文件(:
为块设置当前租户
ActsAsTenant.with_tenant(newly_created_tenant) do
# Current tenant is set for all code in this block
end
这行得通。
但是,如果要在创建帐户后向新租户授予对其应用的直接访问权限。您最好让他登录,然后创建默认值。如何登录他取决于您的身份验证解决方案。