2016-04-17 4 views
1

初めての訪問者にはコンテンツを表示したいので、セッションをチェックしてクッキーを保存するヘルパーメソッドを作成しました。初めての訪問者にコンテンツを表示する

私のコントローラは、このように設定されています

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    helper_method :first_time_visiting? 

    def first_time_visiting? 
    if session[:first_time].nil? 
     cookies.permanent[:first_time] = 1 
    end 
    end 
end 

class ItemsController < ApplicationController 
    before_action :first_time_visiting? 
end 

そして、私はこのような私の見解でメソッドを呼び出しています:

<% if first_time_visiting? %> 
    <div class="new-visitor-show">Test</div> 
<% end %> 

私が最初にした後、「テスト」を見るべきではありません訪問する、しかし私はある。ヘルパーメソッドを誤って使用していますか?

答えて

3

あなたは(ヘルパーなし)これを使用することができます:

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :first_time_visit, unless: -> { cookies[:first_visit] } 

    def first_time_visit 
    cookies.permanent[:first_visit] = 1 
    @first_visit = true 
    end 
end 

first_time_visitがビューに一度だけ、そのために呼び出される関数:

<% if @first_visit %> 
    <div class="new-visitor-show">Test</div> 
<% end %> 
+0

ああ、私は分かりませんでした。ありがとう!ちょうど私は理解しています:あなたはcookieと@first_visitと呼ばれるインスタンス変数を設定するbefore_actionを定義しています。 – sabaeus

+1

クッキーが既に設定されている場合、メソッド 'first_time_visit'は呼び出されないので、@ first_visitはnilになります –

0

私はあなたがcookiesをチェックされるべきだと思います代わりにsession

def first_time_visiting? 
    if cookies[:first_time].nil? 
     cookies.permanent[:first_time] = true 
     true 
    else 
     false 
    end 
    end 
関連する問題