Ruby on rails RubyonRails-自动创建对象

Ruby on rails RubyonRails-自动创建对象,ruby-on-rails,ruby,object,model-view-controller,methods,Ruby On Rails,Ruby,Object,Model View Controller,Methods,在我的应用程序中,我有用户表和活动表-用户有三种类型的活动。我还有一个周数表-每个活动都有一组周数,并且用户拥有这些活动。因此周属于用户和活动,而活动属于用户。下面是我的用户表: class SorceryCore < ActiveRecord::Migration def change create_table :users do |t| t.string :first_name t.string :surname t.integer :previou

在我的应用程序中,我有
用户
表和
活动
表-
用户
有三种类型的
活动
。我还有一个
周数
表-每个
活动
都有一组
周数
,并且
用户拥有这些活动。因此
属于
用户
活动
,而
活动
属于
用户
。下面是我的
用户
表:

class SorceryCore < ActiveRecord::Migration
 def change
  create_table :users do |t|
     t.string :first_name
     t.string :surname
     t.integer :previous_award
     t.integer :chosen_award
     t.string :email,            :null => false
     t.string :crypted_password
     t.string :salt

     t.timestamps
     end

   add_index :users, :email, unique: true
  end
end
是否有一种方法可以使用默认值为每个与当前用户相关的活动自动创建这些周对象

更新: 周模型:

class Week < ActiveRecord::Base
   belongs_to :activities
   belongs_to :users
end
classweek
活动模式:

class Activity < ActiveRecord::Base
    belongs_to :user
    has_many :weeks, dependent: :destroy

    $activity_type_var = 1;

end
类活动
用户模型:

class User < ActiveRecord::Base
    has_many :activities, dependent: :destroy
    has_many :weeks, dependent: :destroy
    authenticates_with_sorcery!
    validates :password, length: { minimum: 3 }
    validates :password, confirmation: true
    validates :email, uniqueness: true, email_format: { message: 'has invalid format' }

end
class用户
您可以在活动模型上创建后使用活动记录回调
,并在创建活动对象后创建周对象

如果我理解您的权利,请在您的活动模型中添加:

after_create :create_weeks

def create_weeks
  user.chosen_award.times do
    weeks.create(user: user, week_num: 1) #add your default values
  end 
end

在创建活动对象后,您可以在活动模型上使用活动记录回调
,并在创建活动对象后创建周对象

如果我理解您的权利,请在您的活动模型中添加:

after_create :create_weeks

def create_weeks
  user.chosen_award.times do
    weeks.create(user: user, week_num: 1) #add your default values
  end 
end

ActiveRecord回调是一个很好的选择。我还建议您将:activity_type列重命名为just:type。然后,您可以使用开箱即用的单表继承,如果我理解正确的话,它正是您所需要的

ActiveRecord回调是一个不错的选择。我还建议您将:activity_type列重命名为just:type。然后,您可以使用开箱即用的单表继承,如果我理解正确的话,它正是您所需要的

为什么您需要
指的是
用户
,因为
活动
指的是
用户
指的是
活动
?也许我没有?我认为我需要建立这种关系,但你可能是对的,我不认为我需要在周表中包括用户id为什么你需要
week
user
,因为
activity
指的是
user
week
指的是
activity
呢?也许我没有?我认为我需要建立这种关系,但你可能是对的,我认为我不需要在week表中包含用户id
class User < ActiveRecord::Base
    has_many :activities, dependent: :destroy
    has_many :weeks, dependent: :destroy
    authenticates_with_sorcery!
    validates :password, length: { minimum: 3 }
    validates :password, confirmation: true
    validates :email, uniqueness: true, email_format: { message: 'has invalid format' }

end
after_create :create_weeks

def create_weeks
  user.chosen_award.times do
    weeks.create(user: user, week_num: 1) #add your default values
  end 
end