我的模型Expense
修改了quantity
属性的getter和setter,以便应用正在使用的货币:
这是吸气剂:
def quantity
update_rates
c = read_attribute(:quantity)
if @@current_currency != "EUR"
@@eu_bank.exchange(c*100, "EUR", @@current_currency).cents/100.0
else
c
end
end
在调用@expense.quantity
的情况下使用它,就像在索引或显示视图中一样。但是,当form_for(@expense)
标记用于编辑费用时,加载的数量值不是它应该的值。它显示为直接从数据库中提取(我猜)并且我没有使用我定义的getter:
<%= form_for(@expense) do |f| %>
<div class="field">
<%= f.label :quantity %><br>
<%= f.text_field :quantity %>
<% end %>
我该如何解决这个问题?
答案 0 :(得分:0)
我的第一个想法是强制text_field
的值,如:
<%= f.text_field :quantity, value: @expense.quantity %>
但我认为这可以通过更好的方式解决。
quantity
相对于货币和东西的存储方式如何?答案 1 :(得分:0)
您当前的实施正在尝试处理三件事:
建议您将额外的责任委托给另一个类,并将该方法限制为属性获取。
查看相关模型逻辑可以进入演示者。您可以将转换逻辑保留在演示者中,也可以为其创建单独的模块/类,具体取决于它的复杂程度。
http://robertomurray.co.uk/blog/2014/decorators-presenters-delegators-rails/