Rails [设计]:设计破坏导航栏链接

时间:2015-07-17 14:29:21

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

我有一个Bootstrap导航栏,但是标签是在运行时生成的。这是因为它们链接到show /:id,用户可以随时删除与该选项卡关联的记录。我创建了这样的链接:

<% @groups.each do |group| %>
  <li id=<%= group.id %>><%= link_to t("navbar." + group.name.singularize.downcase), :controller => 'groups', :action => 'show', :id => group.id %></li>
<% end %>

这一切正常,直到我使用Devise并尝试访问/ admins / sign_in。导航条代码仍然完全相同,但我收到了UrlGenerationError:

No route matches {:action=>"show", :controller=>"devise/groups", :id=>4, :locale=>nil}

我的猜测是错误源于控制器“设计/组”,因为这是我发现的唯一区别。有没有办法告诉它不要先“设计”?或者我是否必须为所有这些位编写新路由?如果我必须添加新路由,我如何在路由中使用资源?

我怀疑Devise还会打破其他页面上我必须以这种方式编码的其他链接。

路线:

Rails.application.routes.draw do
  devise_for :admins
  get 'search/index'
  get 'tags/:tag', to: "search#index", as: :tag

  scope "(:locale)", :locale => /#{I18n.available_locales.join("|")}/ do
    get 'home/index'
    root :to => "home#index"
    resources :brands
    resources :faqs
    resources :categories
    resources :subgroups
    resources :groups
 end

更新:我尝试将链接更改为以下

<% @groups.each do |group| %>
  <li id=<%= group.id %>><%= link_to(t("navbar." + group.name.singularize.downcase), url_for(:controller => 'groups', :action => 'show', :id => group.id)) %></li>
<% end %>

但当我访问登录页面时,它仍然会以“设计/群组”作为控制器。登录后,没有问题。

1 个答案:

答案 0 :(得分:0)

我有一个奇怪的&#34;修复&#34;但它一点也不觉得正确。我创建了从Devise :: [name]控制器派生的新控制器,并对我需要的任何方法执行了以下操作

def new
  super
end

然后编辑routes.rb

devise_for :admins, :controllers => {:[name] => "[name]"}

我必须为每个控制器添加一个新的:[name] => "[name]"对。  通过查看rake routes来确定我需要哪些。一切都在发挥作用,但我确信那里有一个更清洁的解决办法。

P.S。您可能需要运行rails g devise:views