2016-04-17 63 views
1

我想要一段內容展示給第一次訪問rails應用程序的訪問者,所以我寫了一個輔助方法來檢查會話並存儲cookie。將內容展示給第一次訪問rails應用程序

我的控制器被設置爲這樣的:

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

啊,我不知道。謝謝!我的理解是:你正在定義一個before_action來設置一個cookie和一個名爲@first_visit的實例變量,除非該cookie已經存在於用戶的瀏覽器中。 – sabaeus

+1

如果cookie已設置,則不會調用方法'first_time_visit',因此@first_visit將爲零 –

0

我想你應該檢查cookies而不是session

def first_time_visiting? 
    if cookies[:first_time].nil? 
     cookies.permanent[:first_time] = true 
     true 
    else 
     false 
    end 
    end 
相關問題