如何从Devise页面链接到应用程序中其他位置的页面?

时间:2011-11-29 19:35:35

标签: ruby-on-rails ruby-on-rails-3 devise routes

我的应用程序使用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" %> - 虽然不是一个理想的答案。

3 个答案:

答案 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'

我也离开街区外的路线。不是很干,但它确实有效。