2

Пример ...Как создать связанные записи перед тем, как класс «арендатор» будет сохранен с act_as_tenant gem?

У меня есть класс под названием 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

Есть ли способ условно обходить проверку act_as_tenant, когда это новый_запись? или лучший способ справиться с этим типом вещей?

Я довольно новичок в рельсах/рубине на несколько месяцев назад ...?

UPDATE

Ну, я понял, если я изменить его на «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 

ответ

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 

Это работает.

Однако, если вы хотите предоставить новому арендатору прямой доступ к своему приложению после создания своей учетной записи. Вам лучше войти в систему, а затем создать настройки по умолчанию. Как зарегистрировать его в зависимости от вашего решения для проверки подлинности.

+0

Спасибо Эрвин, это очень полезно и было тем, что я искал. Продолжайте делать то, что вы делаете! –

 Смежные вопросы

  • Нет связанных вопросов^_^