2011-12-03 95 views
1

我期待在我們的一些代碼,並有很多下面的實例:解決方案「選定」 CSS反模式

link_to t('.projects'), projects_path, :class => params[:controller] == "projects" ? "selected" : "" 

這樣做的目的是改變一個鏈接的樣式/選項卡/等表示當前頁面對應於該鏈接。這種模式看起來過於脆弱,應該有更好的方法。任何人都知道嗎?

回答

0

我會盡量減少視圖中的邏輯。在這種情況下,將您的條件類屬性功能移到幫助類中。

爲了使您的代碼更加脆弱,您可以使用「controller_name」而不是params [:controller]來與您的字符串進行比較。這將防止用戶傳遞「控制器」變量的可能覆蓋。

該函數將返回零,或「選擇」的基礎上的參數傳遞匹配CONTROLLER_NAME:

def conditional_select(user_controller_name) 
    "selected" if controller_name == user_controller_name 
end 

link_to t('.projects'), projects_path, :class => conditional_select("projects") 

這允許在其他鏈接代碼重用,更容易測試。它還分區功能,讓link_to擔心鏈接,而「conditional_select」擔心構建類屬性值。