覆盖属性函数rails mongoid

时间:2011-03-23 11:54:59

标签: ruby-on-rails function attributes override mongoid

我有这样的模特。

class Money
  include Mongoid::Document

  #interval is how often the compensation is paid
  field :salary, :type => Integer # must be saved in cents
  field :commission, :type => Integer # must be saved in cents
  field :total, :type => Integer # must be saved in cents
end
总计是工资和佣金的总和。工资和佣金均以美分计算。 但我的问题是,当它被编辑时,我需要以美元数字显示它。

例如,如果工资分为5000000,那么当我按下编辑时,我需要在工资文本框中看到50000。

也欢迎其他一些解决方案

2 个答案:

答案 0 :(得分:3)

如果要在模型级别强制执行此模式,则可以覆盖setter和getter:

class Money
  #...
  def salary
    self.salary / 100
  end
  def salary=(value)
    self.salary * 100
  end
end

在这种情况下,您可以免费进行编辑/显示,而无需编写任何助手。

虽然,我认为正确的方法是在视图级别通过帮助程序定义。该模型不应该与此有关。

答案 1 :(得分:2)

看看ActionView::Helpers::NumberHelper。在你的情况下,你可以写这样的自己的帮助:

def money_to_textbox (money)
    money / 100
end

这个帮助方法应放在app \ helpers中,然后在视图中你可以像这样使用:

<%= money_to_textbox @money %>