完整的网站导航链接导航

时间:2015-09-02 17:34:25

标签: ruby-on-rails ruby-on-rails-4

我的网站有一个完整的网站导航侧边栏,可让您从网站的任何其他页面访问大多数(如果不是全部)页面。我遇到的问题是:它变得越来越复杂,甚至没有100%的时间都在工作。

我有模型User,Foo属于User,而Bar属于Foo。因此,我的网站导航仅用于Foo索引,在我的帮助文件中看起来像这样:

  def foo_index_link(text)
    if current_user == nil
        nil
        elsif @user != nil && @user.id != nil
            if @user.standard_name != nil
            if current_user.admin? || current_user.super_admin?
                    link_to @user.standard_name, admin_user_foos_path(@user)
            elsif current_user.standard?
                    link_to @user.standard_name, member_user_foos_path(@user)
                end
            else
            if current_user.admin? || current_user.super_admin?
                    link_to text, admin_user_foos_path(@user)
            elsif current_user.standard?
                    link_to text, member_user_foos_path(@user)
                end
        end     
      elsif @foo != nil && @foo.id != nil
            if @foo.user.standard_name != nil
            if current_user.admin? || current_user.super_admin?
                    link_to @foo.user.standard_name, admin_user_foos_path(@foo.user)
            elsif current_user.standard?
                    link_to @foo.user.standard_name, member_user_foos_path(@foo.user)
                end
            else
            if current_user.admin? || current_user.super_admin?
                    link_to text, admin_user_foos_path(@foo.user)
            elsif current_user.standard?
                    link_to text, member_user_foos_path(@foo.user)
                end
            end
    elsif @bar != nil && @bar.id != nil
            if @bar.foo.user.standard_name != nil
            if current_user.admin? || current_user.super_admin?
                    link_to @bar.foo.user.standard_name, admin_user_foos_path(@bar.foo.user)
            elsif current_user.standard?
                    link_to @bar.foo.user.standard_name, member_user_foos_path(@bar.foo.user)
                end
            else
            if current_user.admin? || current_user.super_admin?
                    link_to text, admin_user_foos_path(@bar.foo.user)
            elsif current_user.standard?
                    link_to text, member_user_foos_path(@bar.foo.user)
                end
            end
    else
        nil
    end
  end
<(>(显然我改了名字,所以不要小心错字))

对于用户当前可能处于的任何页面,这不仅非常冗长,它也不适用于部分,因为部分使用局部变量,如foo而不是@foo。

必须有一个更好的方法来解决这个问题,但我还没有真正找到它。我准备重新设计我的方法,只需要一些建议。有没有?

编辑(更多澄清):

我的用户,Foo和Bar都是嵌套的独立模型。我的配置/路由例如:

namespace :member do
  resources :users do
    resources :foos
  end
  resources :foos do
    resources :bars
  end
end

我的目的是拥有一个_sidebar.html.erb文件,该文件是应用程序布局的一部分,并且包含指向该站点的其他各个部分的链接。我遇到的问题是链接依赖于当前的页面资源。例如:

如果我想在条形图页面链接到条形索引,链接将是:

link_to "bar index", member_foo_bars_path(@bar)

但是在foo索引页面上的相同链接将是:

link_to "bar index", member_foo_bars_path(@foo)

更糟糕的是,如果你偏爱,他们无法访问实例变量,所以@bar和@foo不要&#39;工作

我正在寻找一些更好的方法来处理这些加载在每个页面上的情境链接(因为它们是布局的一部分)然后是一个巨大的if语句列表,用于检查实例变量的状态。这可以解释一下吗?

0 个答案:

没有答案