2

例子...

我有一个班级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的检查?还是处理这类事情的更好方法?

几个月前我对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
4

1 回答 1

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

这行得通。

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

于 2013-06-24T12:43:43.237 回答