При сохранении товара в Spree (RoR) цена умножается на 100 - PullRequest
4 голосов
/ 25 февраля 2012

Я установил платформу для онлайн-покупок Spree поверх Rails 3.1.3 и Ruby 1.9.3.Я также использую драгоценный камень Spree_i18n, чтобы локализовать магазин.Теперь, когда я сохраняю товар, цена умножается на 100.

Например, в админке я набираю цену 3.20.Это приводит к значению 320. Если я сохраню снова, оно изменится на 32000 и т. Д.

Вот мой локализованный файл de_numbers.yml для справки:

---
de:
  number:
    currency:
      format:
        format: "%u%n"
        unit: "€"
        precision: 2
        separator: '.'
        delimiter: ','

Я не могу вспомнитьничего необычного в моей настройке, поэтому я удивляюсь, почему это не распространенная проблема.Любая помощь будет оценена.

Ответы [ 2 ]

7 голосов
/ 26 февраля 2012

EDIT:

spree-core: Форма продукта не обрабатывает отображение product.price и product.cost_price в отношении I18n / локализация. Чтобы это сработало, вам нужно изменить ядро. Я собираюсь написать об этом в команду Spree Core, но пока что я тестировал это исправление, и оно должно работать.

В / gems / spree_core-1.0.0 / app / views / spree / admin / products / _form.html.erb вам необходимо изменить следующие строки:

<%= f.text_field :price, :value => number_with_precision(@product.price, :precision => 2) %>

быть таким:

<%= f.text_field :price, :value => number_with_precision(@product.price, :precision => I18n.t('number.currency.format.precision'), :separator => I18n.t('number.currency.format.separator'), :delimiter => I18n.t('number.currency.format.delimiter')) %>

и это:

<%= f.text_field :cost_price, :value => number_with_precision(@product.cost_price, :precision => 2) %>

быть таким:

<%= f.text_field :cost_price, :value => number_with_precision(@product.cost_price, :precision => I18n.t('number.currency.format.precision'), :separator => I18n.t('number.currency.format.separator'), :delimiter => I18n.t('number.currency.format.delimiter')) %>

По сути, мы заставляем его обрабатывать потенциальные значения I18n.

ОРИГИНАЛ:

Я точно продублировал ваш файл и попробовал несколько тестов, чтобы воссоздать его (создать новый продукт, новый вариант продукта, изменить цену продукта, себестоимость и т. Д.). Чтобы воссоздать это, вам нужно создать de_numbers.yml и перевернуть вашу локализацию на «de» в инициализаторе Spree с помощью «config.default_locale = 'de'"

Вот некоторые предлагаемые исправления:

  1. убедитесь, что вы запускаете пакетную установку
  2. в вашем Gemfile, убедитесь, что вы используете последнюю версию i18n (

gem 'spree_i18n',: git => 'git: //github.com/spree/spree_i18n.git')

  1. исправьте пробел в 2 пробела вместо табуляции (это потенциально проблема пробела, из-за которой он не может прочитать ваши значения i18n )
  2. Войдите в консоль rails и выйдите из значений (т. Е.

I18n.t ( 'number.currency.format.unit')

  1. Попробуйте сначала заставить работать это в локали "en", а затем в "de".
  2. Сначала поместите ваши значения в "de.yml" или "en.yml" и посмотрите, работают ли они, прежде чем помещать в файл "de_currency.yml".
1 голос
/ 25 февраля 2012

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

3,20

Вместо

3.20

Это обсуждение форматирования валюты , хотяне относится к разработке на Ruby, может дать дополнительную информацию.

...