如何在Rails 4上向我的表添加求和列

时间:2015-05-12 07:28:35

标签: mysql ruby-on-rails

我有一个已经存在的表"寄存器"用柱子; :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

我收到错误

1 个答案:

答案 0 :(得分:1)

您可以将字段添加到registers表,然后使用适当的值填充它。

首先,您使用新的migration

添加字段

rails g migration addBalanceToRegisters balance:float

然后开始迁移以将字段添加到registersrake 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