0

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
4

2 に答える 2

1
unless Survey.find_by_remember_token(cookies[:remember_token]).nil?

これは、Survey が nil でない場合にリダイレクトすることを意味します。次のように変更する必要があると思います。

unless Survey.find_by_remember_token(cookies[:remember_token])

また

if Survey.find_by_remember_token(cookies[:remember_token]).nil?
于 2013-04-04T21:26:09.420 に答える