我有一个已经存在的表"寄存器"用柱子; :full_name, :amount_paid, :user_id, :course_id
。
我还有包含列的课程表::title, :price
。
我想在寄存器表中添加一列,用于计算register.course.price
和寄存器的余额。
所以我试过了
rails g migration add_balance_to_registers balance:"register.course.price - register.amount_paid"
但是当我尝试
时rake db:migrate
我收到错误
答案 0 :(得分:1)
您可以将字段添加到registers
表,然后使用适当的值填充它。
首先,您使用新的migration
rails g migration addBalanceToRegisters balance:float
然后开始迁移以将字段添加到registers
表
rake db:migrate
但是字段balance
将为空,现在您必须填充它。
您可以为此创建rake
任务。
在lib/tasks/
内部文件夹中添加新文件registers.rake
。
在registers.rake
内添加以下代码:
namespace :registers do
desc "populate registers balance with appropriate balance amount"
task :sync_balance => :environment do
Register.all.each do |r|
b = r.course.price - r.amount_paid
r.update balance: b
end
end
end
然后运行此rake
任务,例如
rake registers:sync_balance