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



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

这行得通。

但是,如果要在创建帐户后向新租户授予对其应用的直接访问权限。您最好让他登录,然后创建默认值。如何登录他取决于您的身份验证解决方案。

相关内容

  • 没有找到相关文章

最新更新