“选定”CSS反模式的解决方案

时间:2011-12-03 22:43:12

标签: ruby-on-rails ruby-on-rails-3.1

我正在查看我们的一些代码,并且有很多以下实例:

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

这样做的目的是改变链接/选项卡/等的样式,以指示当前页面对应于该链接。这种模式似乎过于脆弱,就像应该有更好的方法。有人知道吗?

1 个答案:

答案 0 :(得分:0)

我会尽量减少你视图中的逻辑。在这种情况下,将条件类属性功能移动到辅助类中。

为了使您的代码不那么脆弱,您可以使用“controller_name”而不是params [:controller]来比较您的字符串。这将阻止用户传递“controller”变量的可能覆盖。

此函数将根据与controller_name匹配的参数返回nil或“selected”:

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”则担心构建类属性值。