Rails 4 - 设置会话变量,以便用户只能在该会话期间查看页面

时间:2016-05-24 21:57:20

标签: session ruby-on-rails-4 session-variables

我正在使用rails 4并希望提供包含个人信息的即时报价。我需要让某个人的整个会话可以查看报价而不让他们登录,但其他人会话无法看到该报价。我们的想法是,他们可以看到我给他们的报价,并将该报价下载为PDF。这是我在控制器中所拥有的精髓 - 但它不起作用。

class ClientsController < ApplicationController
  before_filter :check_guest, :only => :show
def check_guest
  # # if user isn't logged in
  if current_user.nil? 
  #   # if user has already viewed, redirect
  #   if session[:viewed] == true
  #     flash[:alert] = "You can only view a quote once. Please resubmit your information."
  #     redirect_to root_path
  #   # if user hasn't viewed, allow access, but flag as having viewed
  #   else
  #     session[:viewed] = true
  #   end
    if session[:quote_id] == params[:id] # where params[:id] is the quote ID
      flash[:alert] = "Allow"
    else
      flash[:alert] = "Dont Allow"
    end        
  end
end

我想我需要设置变量session [:quote_id] = @ client.id但不确定我是否在create action或show action中这样做。无论我把它放在哪里,整个代码都不起作用。任何帮助是极大的赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

我需要做的两件事。

首先,将会话变量设置为create中的LAST操作。

def create
....some actions
session[:quote_id] = @client.id
end

接下来,我必须将params ID转换为整数,因此它会正确评估。

session[:quote_id] == (params[:id].to_i)