会话计数器无效

时间:2015-08-25 21:34:25

标签: ruby-on-rails

我可能正在做一些非常愚蠢的事情,但我不确定我做错了什么。 我正在创建一个计数器,用于查看用户在当前会话中访问索引页面的次数。

以下是在store_controller.rb

class StoreController < ApplicationController

 def increment_counter
   if session[:counter].nil?
     session[:counter] = 0
   end
   session[:counter] += 1
 end  

  def index
    @products = Product.order(:title)
    @counter = increment_counter
  end
end

以下是application.html.erb布局视图。

<%= "You've visited this page #{pluralize(@counter, "time")}" %>

当然还有其他代码,但现在似乎无关紧要。

@counter显示值0,并且不会增加任何值。

我做错了什么? 感谢。

2 个答案:

答案 0 :(得分:1)

尝试

class StoreController < ApplicationController
    after_action :increment_counter, only: [:index]

    def index
        @products = Product.order(:title)
    end

    private
        def increment_counter
            if session[:counter].nil?
                session[:counter] = 0
            end
            session[:counter] += 1
            @counter = session[:counter]
        end  
end

答案 1 :(得分:0)

如果需要,可以消除实例变量的使用:

class StoreController < ApplicationController
  before_action :increment_counter, only: [:index]

  def index
    @products = Product.order(:title)
  end

  private

  def increment_counter
    if session[:counter].nil?
      session[:counter] = 0 #=> Or use 1
    else
      session[:counter] += 1
    end
  end
end

app/views/store/index.html/erb添加:

<%= "You have visited #{pluralize(session[:counter], 'time')}" %>