1
我有這樣一個模型:查看Rails中不調用重寫屬性訪問器
class Transaction < ActiveRecord::Base
def amount
self[:amount].abs
end
def transaction_type
read_attribute(:amount) > 0 ? :credit : :debit
end
def transaction_type=(type)
if type == :credit || type == 'credit'
self[:amount] = amount.abs
elsif type == :debit || type == 'debit'
self[:amount] = amount.abs * -1
else
raise ArgumentError.new 'Type must be credit or debit'
end
end
end
因爲我希望我的量柱始終是正數渲染時。問題顯然是從來沒有視爲這種方法:
<% form_for @transaction do |f| %>
<%= f.error_messages %>
<p>
<%= f.label 'Where?' %><br />
<%= f.text_field :target %>
</p>
<p>
<%= f.label 'What?' %><br />
<%= f.text_field :memo %>
</p>
<p>
<%= f.label 'How much?' %><br />
<%= f.text_field :amount %>
</p>
<p>
<%= f.radio_button :transaction_type, 'debit' %>
<%= f.label :transaction_type_debit, 'Debit' %>
<%= f.radio_button :transaction_type, 'credit' %>
<%= f.label :transaction_type_credit, 'Credit' %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
我做錯了什麼?還是有更好的方法來做到這一點?
編輯:添加我的transaction_type訪問器方法,這更好地解釋了爲什麼我沒有在數據庫中存儲金額作爲一個正數。
您能否添加更多信息 - 比如爲什麼不將它作爲正數存儲在數據庫中,而不是在視圖級別進行渲染? – 2009-05-23 00:44:57