Web ページで簡単なアンケートを設定しています。同じ人が複数回アンケートに回答できないように、before_filter を追加したいと考えています。
私の考えは
1) 各アンケートの送信時に、remember_token を作成して保存します。
2) その記憶トークンに基づいて Cookie を作成し、送信者のブラウザに配置します。
3) 一部のユーザーがページにアクセスするたびに、前フィルターを使用して、データベース内のアンケートに一致する Cookie を持っていないことを確認します。
以下にまとめてみたのですが、なぜかremember tokenの有無に関わらず、自動的に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