在我的模型中,有很多屬性和方法根據模型實例的屬性執行一些計算。如果計算所依賴的屬性爲零,我一直讓方法返回nil。作爲這個設計決定的結果,我在我的視圖中顯示這些值之前做了很多無核查。我應該避免在Rails視圖中檢查零嗎?
我想到有這些方法返回零,而不是零的時候,他們沒有足夠的信息,但我選擇了零,因爲零是一個有效的計算結果和零意味着沒有足夠的信息。
我應該返回0而不是零嗎?有沒有其他模式可以用來避免在我的視圖中執行一堆零檢查?
在我的模型中,有很多屬性和方法根據模型實例的屬性執行一些計算。如果計算所依賴的屬性爲零,我一直讓方法返回nil。作爲這個設計決定的結果,我在我的視圖中顯示這些值之前做了很多無核查。我應該避免在Rails視圖中檢查零嗎?
我想到有這些方法返回零,而不是零的時候,他們沒有足夠的信息,但我選擇了零,因爲零是一個有效的計算結果和零意味着沒有足夠的信息。
我應該返回0而不是零嗎?有沒有其他模式可以用來避免在我的視圖中執行一堆零檢查?
我傾向於認爲你正在做正確的事情,如果你的問題是選擇是否顯示或不顯示,計算的結果。如果顯示任何價值都沒有意義,那麼零是完全合理的。
但是,如果你的業務邏輯導致你陷入其中許多觀點會習慣性地空的狀態,那麼你或許應該重構,使得你的程序失去了它的漏抽象。
考慮,例如,其開始通過跟蹤食譜Food
的應用程序。然後,隨着需求的變化,我們得到餡餅的概念需要顯示不同於漢堡的信息。而不是有一個calculate_deliciousness_of_pie_or_nil_for_burger
方法,然後在視圖中檢查零,我會把它分成餅圖和漢堡的漢堡視圖。這可能(可能會)需要重新思考我的對象抽象。
這太問題可能會爲您提供在零或零模式的一些見解:
「我做了很多零檢查我的意見顯示這些值之前。」
我想返回nil是一個好主意。我有時使用的另一種方法是返回散列。例如,如果方法成功了,我可能會返回:
{:result => 1234}
,如果方法「失敗」,我可能會返回:
{:error => 'Insufficient attributes to calculate result.'}
這使得它微不足道的決定勝負沒有猜測。
雖這麼說,請確保您創建的helper方法來調用這些方法並檢查他們的結果。視圖應該包含很少的邏輯。所以,與其這樣做是爲了控制結果是否顯示:
<% if result = some_method -%>
Your result is <%=h result -%>.<br />
<% end -%>
你應該這樣做:
<% display_some_method %>
和#display_ some_方法位於應用程序/傭工/ whatever_helper.rb。
我用兩種方法攻擊這個問題。
我嘗試將更嚴格的檢查轉移到模型中。例如,方法Apartment#address_visible?(current_user)
使它更清潔。
由於Rails 2.3也有#try
方法,只有在方法已經定義的情況下才調用方法。它可以使用chris'example輕鬆包含到您的項目中。這是最簡單的情況。
如果你不在2.3也有andand http://github.com/raganwald/andand – 2009-02-18 03:20:02
你應該在上面的例子中使用==。 – maurycy 2008-12-26 20:00:31