2010-09-24 4 views
1

Я использую инициализатор контроллера для настройки файлов, которые мне понадобятся.Где я могу использовать файлы cookie в Ruby on Rails

def initialize 
    super() 
    a = cookies[:a] # EXCEPTION 

end 

Однако я не могу использовать файлы cookie, потому что это значение равно null, система еще не прочитала их из заголовка.

Та же проблема была с ASP.NET MVC, где я не мог получить доступ к куки в конструкторе, но я мог получить к ним доступ в методе Initialize().

Как я могу получить файлы cookie в Rails?

ответ

1

Если вы хотите создать что-то до каждого запроса вы должны использовать before_filter.

class MyController << ApplicationController 
    before_filter :cookie_setup 

    def cookie_setup 
    a = cookies[:a] 
    .. whatever you want to do with 'a' 
    end 
end 
+0

Спасибо! Это решило проблему. – Alex

0

Бывших у меня есть проблемы с этим тоже, это должно работать:

cookies['a'] = 'value' 
a = cookies['a'] 
0

В частности, печенье хэш и то, что вы делаете, добавив пару ключей значение с синтаксисом hash[:key] = value в хэш. Поэтому добавление ключа без присвоения значения даст вам нулевое значение, когда вы его попросите.

irb(main):006:0> cookies = {} 
=> {} 
irb(main):007:0> cookies[:a] = 'value' 
=> "value" 
irb(main):008:0> cookies.inspect 
=> "{:a=>\"value\"}" 
irb(main):010:0> a= cookies[:b] 
=> nil 
irb(main):011:0> cookies.inspect 
=> "{:a=>\"value\"} 
+0

Печенье не ноль, и я проверяю их. Спасибо, в любом случае. – Alex

+0

Я думаю, вы неправильно поняли. значение, которое вы добавляете к ключу в коде, равно нулю. 'a = cookies [: a]' вам не присвоено значение ключу: a. поэтому, когда вы запрашиваете значение, хранящееся позже в 'a', оно будет равно нулю. потому что 'cookies [: a]' оценивается равным нулю. ваша проблема не имеет никакого отношения к доступу в конструкторе, это связано с тем, что вы не понимаете синтаксиса того, как добавлять пары значений ключа в хэш. –

+0

Извините, но вы не понимаете. Проблема заключается в доступе к файлам cookie из инициализатора, потому что объект запроса равен нулю. В браузере есть «a» cookie, поэтому он НЕ нул. – Alex