我的应用程序使用Devise进行登录。我根据维基安装它并使其正常工作。我最近在我的应用程序“http://127.0.0.1:3000/tos”添加了“服务条款”页面,它通过静态控制器进行路由:
match ':action' => 'static#:action'
我在application.html.erb文件的底部放了一个链接。我希望每个页面底部都附有服务条款和隐私政策的链接。但是当我转到users/sign_in
页面时,它不会显示指向TOS页面的链接 - 而是出现错误(如下)。
我删除了我的应用中的所有路线,除了这些(为了追踪此问题):
root :to => 'home#index'
#devise routes
devise_for :users, :admins
#static
match ':action' => 'static#:action'
链接的指定方式如下:<%= link_to "Terms of Service", :controller => "static", :action => "tos" %>
错误是:
No route matches {:controller=>"devise/static", :action=>"tos"}
所以Devise有点妨碍了我对这个静态的路由 页。如何指定转到应用程序根目录的路径 从Devise开始?
更新:在短期内,答案是硬编码:
<%= link_to "Terms of Service", "/tos" %>
- 虽然不是一个理想的答案。
答案 0 :(得分:0)
除了生成视图
rails generate devise:views
您需要配置设计以使用范围视图而不是gem
中的视图config.scoped_views = "true”
在config / initializers / devise.rb文件中
答案 1 :(得分:0)
这应该适用:
match ':action' => 'static#:action', :as => :static
并且应该使用以下内容生成您的链接:
<%= link_to "Terms of Service", static_path(:action => 'tos') %>
答案 2 :(得分:0)
我多次犯这个错误。我通过将路由添加到设计路由块
来修复它 像这样(在你的情况下) 更新添加了不同的路线以尝试devise_for :users, admins do
match '/:action' => 'static#:action'
end
match '/:action' => 'static#:action'
devise_for :users, admins do
match '/tos' => 'static#tos'
end
match ':action' => 'static#:action'
我也离开街区外的路线。不是很干,但它确实有效。