我有一個控制器,計算的時候用戶已經到頁面的數量。我試圖將這個計數提取給一個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