我正在我的网页上设置一个简单的调查。我想添加一个 before_filter 以便同一个人不能多次参加调查。
我的想法是
1) 在提交时为每个调查创建并保存一个 remember_token。
2) 根据要放置在提交者浏览器上的记住令牌创建一个 cookie
3) 每次访问页面时,使用前置过滤器以确保他们没有与数据库中的调查相匹配的 cookie。
我将以下内容放在一起,但由于某种原因,它会自动重定向到Thanks_path,无论我是否有记住令牌?
为什么这样做?我是否错误地使用了会话 cookie?
我surveys_controller
的如下
before_filter :new_visitor, only: [:new, :create]
def new
#this is the survey form
@survey = Survey.new
end
def create
#this submits the survey and creates a cookie on the client's browser
@survey = Survey.new(params[:survey])
if @survey.save
cookies.permanent[:remember_token] = @survey.remember_token
redirect_to thanks_path
else
render action: "new"
end
end
def thanks
#blank page that just says, "thanks for taking the survey!"
end
def new_visitor
# if a browser has a survey cookie, redirect to thanks page
unless Survey.find_by_remember_token(cookies[:remember_token]).nil?
redirect_to thanks_path
end
end
我正在我的Survey
模型中创建记住令牌。
class Survey < ActiveRecord::Base
before_save :create_remember_token
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end