我正在使用带有 money - https://github.com/RubyMoney/money gem 的事件管理员。我有一些由货币 gem 处理的属性。
金钱 gem 以美分存储值(value)。当我使用事件管理员创建条目时,会在 DB 中创建正确的值(50.00 为 5000)。
但是,当我编辑一个条目时,该值乘以 100,这意味着 AA 显示 5000 以表示原始输入 50.00。如果我编辑具有货币属性的任何内容,它将乘以 100。在创建时,值(value)通过货币逻辑,但在编辑时,事件管理员以某种方式跳过显示美分而不是最终货币值(value)的部分。
有没有办法在事件管理员的情况下使用金钱 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
最佳答案
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
关于ruby-on-rails-3 - 活跃的管理员和金钱,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13821569/