Rails中的动态菜单类分配

时间:2014-10-03 19:14:42

标签: css ruby-on-rails-3

我有一个辅助导航栏,允许用户在其帐户的各个方面之间移动。

DASHBOARD |活动|投资组合|项目

我希望current_page的CSS是粗体,这样当用户在“仪表板”上时,导航栏看起来像这样:

DASHBOARD |活动|投资组合|项目

我一直在摆弄

if current_page?(controller: 'users', action: 'edit)
  <span class="bold">DASHBOARD</span>
else
  DASHBOARD
end

和类似的代码,但它不起作用。原因是我用来生成视图的嵌套部分。

例如,用户只能显示自己的帐户信息,但由于每个用户都可以拥有多个项目,我正在调用views/projects/_list_by_owner.html.erb下的部分内容并传入

来自@projects = Project.where(:owner_id => current_user.id)

users_controller#show

由于视图是从users_controller而不是projects_controller生成的,因此它没有找到正确的current_page()

关于如何深入挖掘控制器/动作嵌套的想法,或者是动态生成css类的更好方法?

1 个答案:

答案 0 :(得分:1)

继承人我会做什么

助手类

def currentp(path)
  "bold" if request.url.include?(path)
end

查看

<%= link_to "users", posts_path, class: currentp(posts_path) %>

编辑:添加说明

如果您在视图(模板)中工作,则需要使用帮助程序,并且需要构建复杂的HTML,例如甚至定义类。它还允许您在不连接数据库的情况下更改数据的表示。

所以在App&gt;&gt;下助手&gt;&gt; users_helper.rb

添加以下代码:

module LocationsHelper
    def currentp(path)
        "bold" if request.url.include?(path)
    end
end

这将在currentp被调用的任何地方找到,如果页面在当前路径上,它会将html中的类定义为bold

然后您可以使用简单的CSS来定义粗体类

a.bold{
  font-weight:700;
  text-decoration:underline;
}