2011-12-03 58 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”担心构建类属性值。