form_for在加载属性时不使用自定义getter

时间:2015-04-21 16:39:38

标签: ruby-on-rails

我的模型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 %>

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我的第一个想法是强制text_field的值,如:

<%= f.text_field :quantity, value: @expense.quantity %>

但我认为这可以通过更好的方式解决。

  • quantity相对于货币和东西的存储方式如何?
  • setter看起来怎么样?

答案 1 :(得分:0)

您当前的实施正在尝试处理三件事:

  • 属性获取
  • 货币转换
  • 查看格式

建议您将额外的责任委托给另一个类,并将该方法限制为属性获取。

查看相关模型逻辑可以进入演示者。您可以将转换逻辑保留在演示者中,也可以为其创建单独的模块/类,具体取决于它的复杂程度。

http://robertomurray.co.uk/blog/2014/decorators-presenters-delegators-rails/