2015-04-21 27 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/