gpt4 book ai didi

ruby-on-rails - 如何在使用 acts_as_tenant gem 保存 "tenant"类之前建立关联记录?

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:37 28 4
gpt4 key购买 nike

例子...

我有一个名为 client 的类,它是我的 tenant 模型。
我有关联的记录与创建的每个新 client 一起保存。我们称它们为任务
我在 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

有没有办法有条件地绕过 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

最佳答案

如果您创建一个新的租户,然后想创建一些与新客户关联的记录,您首先需要设置当前租户,否则 acts_as_tenant 将不允许您这样做。

您的方法有效,但 acts_as_tenant 也有一个特定的 API(另请查看自述文件):

设置 block 的当前租户

ActsAsTenant.with_tenant(newly_created_tenant) do
# Current tenant is set for all code in this block
end

这有效。

但是,如果您希望新租户在创建帐户后直接访问他的应用程序。你最好让他登录然后创建默认值。如何让他登录取决于你的认证方案。

关于ruby-on-rails - 如何在使用 acts_as_tenant gem 保存 "tenant"类之前建立关联记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196434/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com