如何使用after_create在模型中构建关联/记录

时间:2014-03-24 18:41:27

标签: ruby-on-rails

我有一个用户模型

has_many :trial_subscriptions
accepts_nested_attributes_for :trial_subscriptions, :allow_destroy => true 
attr_accessible :trial_subscriptions_attributes

trial_subscription继承自订阅模型和此模型belongs_to :user 订阅模型belongs_to :question_bank和问题库模型has_many :subscriptions, dependent: :destroy

我有一个正在创建用户及其发布的表单。

我想添加after_create回调

使用一种方法,在检测到用户创建后,为用户和订阅的问题库启动试用订阅。

1)我是在用户模型还是trialubscription模型中进行回调?我在trialubscription模型中做到了

这是迄今为止的方法

class TrialSubscription < ManualSubscription

  after_create :create_trial_subscription_for_all_qbanks

  def create_trial_subscription_for_all_qbanks
    if !trial_account_made_by.nil? #in User 
      QuestionBank.all each do |q| 
        TrialSubscription.create!(question_bank_id: q.id, user_id: self.id, manual_expiry_date: Time.now + (2*7*24*60*60) )
      end 
    end 
  end 
end 
在我的表单中提交新用户后,我在我的rails c中继续

a = User.last
a.trial_subscriptions #returns an array 

我认为create!应该做的伎俩

1 个答案:

答案 0 :(得分:0)

将回调放入User模型中:

#app/models/user.rb
Class User < ActiveRecord::Base
    has_many :trial_subscriptions

    after_create :create_trial
    def create_trial
       QuestionBank.all each do |q| 
           self.trial_subscriptions.build({question_bank_id: q.id, manual_expiry_date: Time.now + (2*7*24*60*60)})
       end
       self.trial_subscriptions.save
    end
end