示例...
我有一个名为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
有什么方法可以有条件地绕过acts_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
答案 0 :(得分:2)
如果您创建新租户,然后想要创建与新客户关联的多个记录,则首先需要设置当前租户,否则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
这很有效。
但是,如果您想在创建帐户后让新租户直接访问其应用。你最好登录他然后创建默认值。如何登录他取决于您的身份验证解决方案。