在我的应用程序中,我有user
表和activities
表 - user
有三种类型activities
。我还有一个weeks
表 - 每个activity
的设置数为weeks
,user
拥有这些活动。因此weeks
属于users
和activities
,而activities
属于users
。以下是我的users
表:
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 CreateActivities < ActiveRecord::Migration
def change
create_table :activities do |t|
t.integer :activity_type
t.string :activity_name
t.string :approver_email
t.references :users, index: true, foreign_key: true
t.timestamps null: false
end
end
end
以下是我的周表:
class CreateWeeks < ActiveRecord::Migration
def change
create_table :weeks do |t|
t.integer :week_num
t.date :date_completed
t.time :time_completed
t.boolean :submitted
t.boolean :approved
t.references :activities, index: true, foreign_key: true
t.references :users, index: true, foreign_key: true
t.timestamps null: false
end
end
end
用户注册过程是一个多阶段注册。当用户注册时,他们也会创建3个活动。我想使用默认值为每个活动自动创建一些周对象。创建的周数应等于用户注册过程的输入 - 来自users表的属性称为“selected award”。 即我希望活动1的周数等于:
current_user.chosen_award
有没有办法为每个与当前用户相关的活动自动创建这些周对象,并使用默认值?
更新: 周模型:
class Week < ActiveRecord::Base
belongs_to :activities
belongs_to :users
end
活动模型:
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
答案 0 :(得分:0)
您可以在Activity模型上使用Active Record Callback after_create
,并在创建Activity对象后创建Week对象。
如果我理解了您的权利,请添加到您的活动模型中:
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
答案 1 :(得分:0)
ActiveRecord回调是一个不错的选择。我还建议您将:activity_type列重命名为:type。然后你可以使用开箱即用的单表继承,如果我理解正确,它就是你需要的。 Here is a good guide about it