2012-09-12 56 views
0

我有一個模型,包含attibutes名稱,標題,描述等。如果名字是由例如天氣foracast我要顯示在展示模板額外的HTML元素最佳方法 - 視圖中的條件

= high_chart("my_id", @chart) 

,至極產生一個很好的圖表。當頁面不是天氣預報時,我不想顯示圖表。

什麼是最好的方法?視圖中的條件?

+0

你讀過那篇關於佈局,諧音,傭工? –

回答

1

您的問題看起來非常接近Object on Rails中的展示模式。

簡單地說,建議的解決方案是將模型包裝在使用模型狀態(在您的情況下是記錄名稱)選擇的裝飾器(或多個裝飾器)中。

我無法解釋它,以及它在book解釋但模式是非常有用,Avdi格林做出了寶石出來的:https://github.com/objects-on-rails/display-case

+0

這就是它!我要去讀它......謝謝! – Remco

1

因爲它看起來像你HAML,你可以只使用一個if修改像這樣:

= high_chart("my_id", @chart) if [model.name] == "weather-forecast" 

其中[model.name]被替換爲相應的代碼。

+0

@Remco,希望你在一段時間之後不會在你的視圖中得到太多這樣的'if's –

+0

如果你有很多'if's你做錯了,應該考慮重構。也就是說,只要條件用於確定應該如何顯示信息,視圖中的偶然if語句就非常好。即使Rails指南中提供的示例也包含條件。 –

1

我知道這個答案完全在頂部,但需要考慮的是將您的條件邏輯移到您的視圖之外。
與視圖演示模式也許會,看到這一點: About presenter pattern in rails. is a better way to do it?

主持人是紅寶石的對象,真的能夠很容易地進行測試。
雖然在視圖內部有很多邏輯真的很難測試。
此外,你想要邏輯隔離,檢查你的視圖頁面內的model.name不是MVC的最佳方式。