渲染一次只能请求一次的页面?

时间:2013-06-03 15:46:05

标签: ruby-on-rails ruby-on-rails-3 redirect render

如何呈现页面显示“/ logout”页面显示“感谢访问我们”然后如果用户重新加载浏览器,它将加载“/”而不是?

我有一个

match "/logout" => "home#logout"

但请不要任何请求“/ logout”的人看到此页面,只有在用户签名后才能直接呈现。

最好的方法是使用条件重定向(到root_path)而不是使用redirect_to

来渲染视图

1 个答案:

答案 0 :(得分:3)

你可能想要:

match '/logout' => 'sessions#destroy', :via => :delete

logout_path帮助器中使用link_to,或者您决定在应用程序中实现注销。

并在SessionsController#destroy的闪光灯中写下您的信息。它可能看起来像:

class SessionsController < ApplicationController
  def destroy
    sign_out # or whatever you named your method for signing out
    flash[:notice] = "Thanks for visiting us"
    redirect_to root_path
  end
end

为了确保在用户未登录时请求转到root_path,您应该在before_filter中放置ApplicationController

class ApplicationController < ActionController::Base
  before_filter :authenticate_user

  def authenticate_user
    unless signed_in?
      redirect_to root_path
    end
  end
  helper_method :authenticate_user
end

这样,用户退出后,所有请求都将重定向到root_path

要在不登录的情况下允许页面请求,请在相应的控制器类中使用skip_before_filter

def MyPublicStuffsController < ApplicationController
  skip_before_filter :authenticate_user
  # ...
end