2016-04-17 12 views
1

Ich möchte ein Stück Inhalt zu ersten Mal Besucher einer Schiene App anzuzeigen, so schrieb ich eine Hilfsmethode, die Sitzung überprüft und speichert einen Cookie.Inhalt zum ersten Mal Besucher von Schienen App

Meine Controller sind wie folgt aufgebaut:

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 

Und dann so ich rufe die Methode in meiner Sicht:

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

ich nicht „Test“ nach der ersten sehen sollte besuchen, aber ich bin. Benutze ich die Hilfsmethode falsch?

Antwort

3

Man könnte dies (ohne Helfer) verwenden:

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 

Die Funktion first_time_visit wird nur einmal aufgerufen werden, und so in der Ansicht:

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

Ah, ich hatte keine Ahnung. Vielen Dank! Nur so verstehe ich: Sie definieren eine before_action, die ein Cookie und eine Instanzvariable namens @first_visit setzt, es sei denn, dass das Cookie bereits im Browser des Benutzers existiert? – sabaeus

+1

Wenn der Cookie bereits gesetzt ist, wird die Methode 'first_time_visit' nicht aufgerufen, und so wird @first_visit null sein –

0

Ich glaube, Sie die cookies Überprüfung sollte stattdessen session.

def first_time_visiting? 
    if cookies[:first_time].nil? 
     cookies.permanent[:first_time] = true 
     true 
    else 
     false 
    end 
    end 
Verwandte Themen