Проблемы с денежными рельсами в Ruby - PullRequest
0 голосов
/ 27 сентября 2018

Я следовал руководству по использованию денежных рельсов в новом проекте.

Вот мой файл миграции:

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

Я прочитал все спецификации 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 голосов
/ 27 сентября 2018

Посмотрите учебник по `money-rails ', вы увидите, что рекомендуемая им миграция

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

Это фактически создает целое поле с именем price_cents в модели.

Для удаления price требуется еще одна миграция, а затем используйте строку выше, чтобы добавить price_cents в таблицу.

...