【问题标题】:Link in Rails doesn't workRails 中的链接不起作用
【发布时间】:2015-02-13 05:06:08
【问题描述】:

我正在使用 Rails 4 和 Devise 3.4.1

我有两页。未经身份验证的用户不应访问这两个页面之一。我在主页中有一个导航栏,其中列出了指向该仪表板页面的链接。

这是链接

<li><a href="/pages/dashboard/">Dashboard</a></li>

为了防止未经身份验证的访问该页面,我将页面控制器修复如下:

class PagesController < ApplicationController
  def home
  end

  def dashboard
    if user_signed_in?
      render "dashboard"
    else
      render "home"
    end
  end

end

到目前为止一切顺利。这对我有用,我很高兴。当我在地址栏中手动输入以下内容时:

localhost:3000/pages/dashboard

如果我以用户身份登录,页面会显示,如果我不是,那么我将被重定向到主页。

现在,我的问题在于那里的链接。它不起作用!我怎样才能解决这个问题?

谢谢。

【问题讨论】:

  • 所以链接正常工作,突然它不起作用?说明您在此之前所做的更改。
  • 没关系,我修好了。谢谢。 :)

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


【解决方案1】:

好的,我修好了。我使用了以下内容:

<li><%= link_to "Dashboard", "/pages/dashboard", method: :get %></li>

代替:

<li><a href="/pages/dashboard/">Dashboard</a></li>

【讨论】:

    【解决方案2】:

    要使用“user_signed_in?”在控制器中,我很确定您需要在同一个控制器中使用 Devise 的 before_filter:

    before_filter :authenticate_user!
    

    【讨论】:

    • 您好,谢谢您的回答。这会将我重定向到 /user/sign_in 页面,但我希望将用户重定向到我已将登录表单移至的主页。
    • 如果您能建议我另一种方法,我可以将用户重定向到根目录而不是 user/sign_in,我将不胜感激。我想在会话控制器中覆盖它,但我不确定如何,因为我尝试了 user_redirect 但它对我不起作用。然后我找到了对我有用的方法。
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多