我正在查看我们的一些代码,并且有很多以下实例:
link_to t('.projects'), projects_path, :class => params[:controller] == "projects" ? "selected" : ""
这样做的目的是改变链接/选项卡/等的样式,以指示当前页面对应于该链接。这种模式似乎过于脆弱,就像应该有更好的方法。有人知道吗?
答案 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”则担心构建类属性值。