2015-04-21 32 views
0

我的模型Expense已经修改getter和setter为quantity属性,以应用货币正在使用不使用自定义的getter:的form_for当加载属性

这里的吸气剂:

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时的情况,如在索引或show视图中。但是,如果使用form_for(@expense)标记编辑费用,则加载的数量值不是应该的值。直接从数据库(我猜)提取它显示我定义的吸气剂不被使用:

<%= form_for(@expense) do |f| %> 
    <div class="field"> 
    <%= f.label :quantity %><br> 
    <%= f.text_field :quantity %> 
<% end %> 

我该如何解决这个问题?

回答

0

我首先想到的是迫使text_field的值,如:

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

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

  • quantity相对于货币和东西是如何存储的?
  • 二传手如何看待?
+0

量被存储在数据库中作为欧元,而转换是基于欧元和当前货币之间的汇率造 – dabadaba

0

您当前实现正试图处理3件事情:

  • 属性越来越
  • 货币转换
  • 视图格式化

建议你委托额外的责任到不同的类,并保持该方法仅限于属性获取。

查看相关模型逻辑可以进入演示者。您可以将转换逻辑保留在演示者中,或根据其复杂程度为其创建单独的模块/类。

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