2011-03-23 60 views
2

我有这样的模型。覆盖属性函数rails 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

ActionView::Helpers::NumberHelper。你的情况,你可以编写自己的助手这样的:

def money_to_textbox (money) 
    money/100 
end 

这个辅助方法应该放在应用程序\助手,然后在视图中,可以使用这样的:

<%= money_to_textbox @money %> 
3

如果你想强制在模型级别这种模式,那么你可以覆盖getter和setter方法:

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

在这种情况下,你必须编辑/显示为免费,而无需编写任何助手。

虽然,我认为这样做的正确方法是通过助手定义在视图级别。该模型不应该关心这一点。