2012-09-30 30 views
0

我有一個廣告模型。每個廣告屬於一個區域。使用幫助器方法構建動態URL

在試圖使用更加易讀的網址,我在我的routes.rb定義自定義路徑:

match "/adverts/:area_id/:id" => "adverts#show", :as => :advert_semantic 

這將產生類似

/adverts/manhattan/123 

然而,在極少數情況下,有可能廣告未被分配到某個區域。在這些情況下,Rails會拋出一個錯誤,並且不會呈現調用該路徑的頁面。

我想通過檢查廣告是否有首先分配的區域來解決此問題,並且如果沒有區域,則生成常規路徑(/ adverts/123)作爲後備。

你認爲最好的方法是做什麼?例如。如果在同一頁面上多次調用該方法,最好是建立一個可以執行上述操作的幫助程序方法,否則會對性能產生影響?採取

+1

它會減少代碼 - 並且更容易維護 - 添加一個「虛假」區域(可能命名爲「無」),並將這些罕見廣告分配給它,以至於99.9%的代碼每隔一段時間廣告總是被分配到某個區域? –

+0

好點,謝謝!按照您的建議完成後備區域,完美地工作。我仍然會將彼得的答案標記爲正確,因爲它可能會幫助其他人執行回退不可能的類似問題。 – simonrohrbach

回答

0

任何額外的操作,當然衝擊性能,但如果你要小心這不應該是望而卻步(和緩存始終是一個選項。)

一個幫手會是我的選擇,在這種情況下。像這樣的東西..

def advert_link(advert) 
    if advert.area.blank? 
    link_to advert.title, advert 
    else 
    link_to advert.title, advert_semantic_path(advert, area_id: advert.area.id) 
    end 
end 

將保持開銷相當小,雖然這取決於它如何大量使用,當然。