积极的管理员和金钱

时间:2012-12-11 13:34:18

标签: ruby-on-rails-3 activeadmin currency

我正在使用money - https://github.com/RubyMoney/money gem的活跃管理员。我有一些由金钱宝石处理的属性。

money gem以美分存储价值。当我创建一个具有活动管理员的条目时,将在DB中创建正确的值(5000表示为50.00)。

但是,当我编辑一个条目时,该值乘以100,这意味着AA显示5000表示原始输入为50.00。如果我用money属性编辑任何东西,它将乘以100.在创建时,该值通过货币逻辑,但在编辑时,不知何故活动管理员跳过该部分显示美分而不是最终货币值。 有没有办法在主动管理中使用money gem?

示例:

form :html => { :enctype => "multipart/form-data"} do |f|
  f.inputs "Products" do
    ......
    f.has_many :pricings do |p|
      p.input :price
      p.input :_destroy, :as => :boolean,:label=>"Effacer"
    end
  f.actions :publish
end

型号:

# encoding: utf-8 
class Pricing < ActiveRecord::Base
belongs_to :priceable, :polymorphic => true
attr_accessible :price
composed_of :price,
    :class_name => "Money",
    :mapping => [%w(price cents), %w(currency currency_as_string)],
    :constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) },
    :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }
end

2 个答案:

答案 0 :(得分:1)

Rails callbacks非常便于为此类问题创建解决方案。

我会使用和after_update回调。

示例:

  # encoding: utf-8 
    class Pricing < ActiveRecord::Base
    after_update :fix_price
    belongs_to :priceable, :polymorphic => true
    attr_accessible :price
    composed_of :price,
        :class_name => "Money",
        :mapping => [%w(price cents), %w(currency currency_as_string)],
        :constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) },
        :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }

    def fix_price
     self.price = (self.price/100)
    end
    end

答案 1 :(得分:0)

我的问题来自于我对Money的使用:

composed_of :price,
    :class_name => "Money",
    :mapping => [%w(price_cents cents), %w(currency currency_as_string)],
    :constructor => Proc.new { |price_cents, currency| Money.new(price_cents || 0, currency || Money.default_currency) },
    :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }

我通过price_cents在DB中重命名了我的价格,并将其放在货币申报中所需的类中。我正在使用我本应该使用价格的分,即使那时使用相同名称的货币对象和数据库中的字段似乎也不起作用。最后,问题与Active Admin无关。