我有一个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 %>
但当我访问登录页面时,它仍然会以“设计/群组”作为控制器。登录后,没有问题。
答案 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