Использование денежных рельсов с монгоидом: как установить валюту для экземпляра модели - PullRequest
0 голосов
/ 29 апреля 2020

Я сейчас использую:

money-rails v1.12 rails v6 mongoid v7

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

Я установил поле в моей модели, как показано ниже

field :price, type: Money, with_model_currency: :currency

Но когда я пытаюсь создать или извлечь записи, я получаю эту ошибку

Mongoid::Errors::InvalidFieldOption
message:
  Invalid option :with_model_currency provided for field :price.

Как я могу использовать опцию with_model_currency в рельсе mongoid? Как еще я могу обрабатывать деньги в приложении рельсовых переходов?

1 Ответ

1 голос
/ 30 апреля 2020

Когда вы используете тип: Деньги в монгоидном поле, вы указываете, что поле должно быть сериализовано / десериализовано с этим классом, в частности. RubyMoney включает методы для сериализации в mon go. with_model_currency - недопустимая опция для макроса field.

Вы путаете метод с денежными рельсами monetize, у которых есть опция с именем with_model_currency.

В одном предложении: отбросьте опцию with_model_currency: :currency, она недоступна в полях mongoid.

Если вы хотите установить валюту по умолчанию, вам нужно будет сделать это, используя Money.default_currency = Money::Currency.new("CAD").

Вы также можете написать свой собственный сериализатор (это не было проверено):

class MoneySerializer

    class << self

        def mongoize(money)
            money.to_json
        end

        def demongoize(json_representation)
            money_options = JSON.parse json_representation
            Money.new(money_options['cents'], money_options['currency_iso']
        end

        def evolve(object)
            mongoize object
        end
    end
end



field :price, type: MoneySerializer

Соответствующие документы:

...