Ruby中的钱轨问题

时间:2018-09-27 15:09:01

标签: ruby-on-rails money-rails

我正在按照一个教程在新项目中使用钱轨。

这是我的迁移文件:

class AddFieldsToPlan < ActiveRecord::Migration[5.1]
  def change
    add_column :plans, :payment_gateway_plan_identifier, :string
    add_column :plans, :price, :integer
    add_column :plans, :interval, :integer
    add_column :plans, :interval_count,:integer
    add_column :plans, :status,:integer
    remove_column :plans, :amount
    remove_column :plans, :payment_frequency

  end
end

我的模特:

class Plan < ApplicationRecord

  enum status: {inactive: 0, active: 1}
  enum interval: {day: 0, week: 1, month: 2, year: 3}

  monetize :price_cents

  def end_date_from(date = nil)
    date ||= Date.current.to_date
    interval_count.send(interval).from_now(date)
  end


end

我阅读了所有关于money-rails的API规范,但我想我不太了解。

如果我运行rails控制台并执行Plan.last.price,它将显示此错误:

.3.4 :001 > Plan.last.price
  Plan Load (2.6ms)  SELECT  "plans".* FROM "plans" ORDER BY "plans"."id" DESC LIMIT $1  [["LIMIT", 1]]
NoMethodError: undefined method `price_cents' for #<Plan:0x007f8ca807f8f0>
Did you mean?  price_cents=
        from (irb):1

我在这里做错了什么?如何为该价格属性设置值?

谢谢

1 个答案:

答案 0 :(得分:2)

查看有关“ money-rails”的教程,您会看到他们建议的迁移是

add_monetize :products, :price # Rails 4x and above

这实际上在模型中创建了一个名为price_cents的整数字段。

您需要再次迁移以删除price,然后使用上面的行将price_cents添加到表中。