我正在編寫一個充當裁縫測量窗體的應用程序。DRY在軌道中定義多個虛擬屬性的方法
客戶模型具有很多以毫米爲單位的整數存儲在數據庫中的屬性。 因爲這個應用程序將在歐洲和美國使用。我將使用虛擬屬性向用戶顯示數據的英寸和釐米版本。
例如,對於客戶的高度我在我的模型有這樣的:
def height_in_cm
height/10
end
def height_in_cm=(height)
self.height = height.to_f * 10
end
def height_in_in
height * 0.039370
end
def height_in_in=(height)
self.height = height.to_f/0.039370
end
這在我_form觀點:
<% if @customer.measure_unit.eql? "imperial" %>
<%= f.input :height_in_in %></br>
<% else %>
<% if @customer.measure_unit.eql? "metric" %>
<%= f.input :height_in_cm %></br>
<% end %>
<% end %>
因爲正如我說我有很多的屬性,我的客戶模型文件變得非常漫長,非常容易出錯。
是否有幹縮短的方法?
謝謝您的回答,但也許我的問題不明確。我的問題是,我的模型有很多屬性,在我的模型中,我必須爲每個屬性定義虛擬屬性。我張貼的片段是爲高度屬性,但我有更多:neck_circonference,sleeve_lenght,waist_circumference,bust_circumference等... – TopperH
@TopperH編輯回答一個元編程示例 – Unixmonkey
這看起來不錯。它只是工作,但我需要研究一點,因爲我不明白這一切。同樣使用這個例子,我需要爲每個屬性預設一個值(甚至爲零),否則在第一個創建操作中它告訴我不能對無類操作。分配零可以防止我添加一個功能,告訴用戶他已完成的表單的百分比。無論如何,這是迄今爲止最好的解決方案。 – TopperH