Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Rails中重写simple.js页面视图计数器cookie函数?_Javascript_Ruby_Ruby On Rails 4_Cookies - Fatal编程技术网

Javascript 如何在Rails中重写simple.js页面视图计数器cookie函数?

Javascript 如何在Rails中重写simple.js页面视图计数器cookie函数?,javascript,ruby,ruby-on-rails-4,cookies,Javascript,Ruby,Ruby On Rails 4,Cookies,我正在尝试使用Rails内置的cookies功能为付费墙重写一个简单的(理论上)基于cookie的页面计数器。访问新页面=将cookie“count”值增加1,等等。当访问者访问X个页面视图时,显示付费墙。这在使用jquery.cookie.js的paywall.js文件中起作用: $(document).ready(function () { // create cookie var visited = $.cookie('visited'); // visited = 0 var p

我正在尝试使用Rails内置的cookies功能为付费墙重写一个简单的(理论上)基于cookie的页面计数器。访问新页面=将cookie“count”值增加1,等等。当访问者访问X个页面视图时,显示付费墙。这在使用jquery.cookie.js的paywall.js文件中起作用:

$(document).ready(function () {
// create cookie
  var visited = $.cookie('visited'); // visited = 0
  var pageTitle = document.title;
  if (visited == 7) {
    $("p.counter").html("From this point, you will always see fancybox on next visit!");
    // open fancybox after 1 secs on 8th visit
    setTimeout(function () {
        $.fancybox.open({
            href: "#inline"
        });
    }, 1000);
  } else {
    visited++; // increase counter of visits
    $("p.counter span").append(visited);
    // set new cookie value to match visits
    $.cookie('visited', visited, {
        expires: 365, // expires after one year
        path: "/"
    });
    return false;
}
}); // ready
放置在应用程序控制器中的以下命令几乎可以工作,但页面计数器正在使用会话[:counter]工作。页面计数完全增加,但如果您关闭并重新打开浏览器,页面计数将重置为零并再次开始计数(显然):


那么,我如何编写increment\u counter方法,或者直接编写set\u visitor\u cookie方法,使每个页面视图上的值增加1呢?

好的,已经完成了。我不知道我是否理解为什么增量代码的工作方式与它完全相同(如果有Ruby专家在场,请跳进来),但这三种方法和before过滤器的工作方式与问题中的jquery代码相同,在cookie中递增计数器,而不使用会话,因此它会在浏览器重新启动时保持不变(直到有人清理了他们的饼干,但我们可以担心以后的evercookie或指纹)。你可以用它来打电话给付费墙,另一种popover,或者我猜几乎任何其他的东西

before_filter :set_visitor_cookie

def set_visitor_cookie
  cookies[:visits] = {
    value: increment_counter,
    expires: 1.year.from_now
    }

  paywall
end

def increment_counter
  @pageviews = cookies[:visits].to_i
  if @pageviews.nil?
    @pageviews == 0
  end
  @pageviews += 1
end

def paywall
  if cookies[:visits].to_i > 5
    flash[:success] = "Paywall time"
  end
end
将paywall方法中的整数值设置为paywall或popover所需的任意值,并将if子句中的代码更改为当计数器超出计数值时所需的任意值

before_filter :set_visitor_cookie

def set_visitor_cookie
  cookies[:visits] = {
    value: increment_counter,
    expires: 1.year.from_now
    }

  paywall
end

def increment_counter
  @pageviews = cookies[:visits].to_i
  if @pageviews.nil?
    @pageviews == 0
  end
  @pageviews += 1
end

def paywall
  if cookies[:visits].to_i > 5
    flash[:success] = "Paywall time"
  end
end