我有一个控制器,计算的时候用户已经到页面的数量。我试图将这个计数提取给一个getter和setter来设置会话变量。获得作品,但设置不。这是控制器:二传手不是设置在轨道会话变量
class StoreController < ApplicationController
def index
@products = Product.order(:title)
v = store_visits + 1
store_visits = v # tests fail if I do it like this
# store_visits += 1 # Undefined method '+' for NilClass if i do it like this
@visits = store_visits
end
def store_visits
if session[:store_counter].nil?
session[:store_counter] = 0
end
session[:store_counter]
end
def store_visits=(value)
session[:store_counter] = value
end
end
这里还有一个失败的测试:
require 'test_helper'
class StoreControllerTest < ActionController::TestCase
test "should count store visits" do
get :index
assert session[:store_counter] == 1
get :index
assert session[:store_counter] == 2
end
end
为什么不将它设置,如果我用+=
为什么store_visits返回nil?任何帮助表示赞赏。
注:本来我提取的方法来一个问题,但我已经编辑这篇删除的问题,因为这个问题是不是与关注,它与setter和/或吸气。
更新:添加日志记录后,很明显内部的store_visits =()方法永远不会到达(但不知何故不会抛出错误)。但是,如果我将它重命名为assign_store_visits(),它会被调用,并更新会话变量。所以我猜这是要么setter方法不能在控制器中工作的错误(这是Rails 4.0.0),或者它们被故意阻塞(在这种情况下,异常会很好)。
的样子,你'配置/初始化/ session_store.rb' – devanand
它有一个(非注释)线: '车厂:: Application.config.session_store:cookie_store,键:“_depot_session'' – cathodion