first, excuse me for my english, I'm french (sorry for that :D).
My actual problem is that I encountered a [b]NoMethodError[/b] when I
tried to access to a session value that is not nil. I'm doing some ajax
calls and I afffect the key/value and access to session variable in the
same controler "injection_controller.rb". I also access to session in a
view [b]_infos_fichiers_xml.html.erb[/b].
The access to session in the view [b]_infos_fichiers_xml.html.erb[/b]
does not cause any problem.
BUT
When I tried to access to the session in [b]injection_controller.rb[/b],
I get a :
[color=red][i]NoMethodError (You have a nil object when you didn't
expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.include?):[/i][/color]
The session contains an Array of objects "XmlFile" and I've configured
my environement.rb to use the memory store :
[i][b]config.action_controller.session_store = :memory_store[/b][/i]
This is my [b]injection_controller.rb[/b] session key/value affectation
code :
[code]def analysis_repository
.....
session[:list_xml] = create_XML_file_obj(false)#put an array of
XmlFile objects in the session
render :update do |page|
page[:liste_fichiers_xml].replace_html render(:partial =>
"infos_fichiers_xml")
page[:liste_fichiers_xml].show
end
end[/code]
No error are generated when I access to session[:list_xml] from the view
[b]_infos_fichiers_xml.html.erb[/b] like this :
[code]<% session[:list_xml].each{|xml_file| %>
<legend><%=h xml_file.name%></legend>
<% } %>"[/code]
But in an another method in [b]injection_controller.rb[/b] :
[code]def inject_data(name_xp,desc_xp)
test = session[:list_xml]
puts "#{test.nil?}"#this line print false
test.each do|xml_file|#this line generate the error
puts xml_file.name
end
end[/code]
So, it's very strange, and when I look at the session with <%= debug
session %> I can see the @data that contains my XmlFile array !
I probably do something bad !
I you have any ideas ?!
I only have the NoMethodError when accessing to the session key/value in
an another function than the one where affectation was made, but in the
same controler. Is it an envidence ?
If the problem only appears when accessing stuff put in the session by
a previous request and happens in development mode it's probably
related to code reloading. In between requests reloads your classes so
on subsequent requests your session contains objects of class that
rails has thrown out.
In general you should avoid sticking large or complicated things in
the session - for example you could store an array of ids of the
active record objects. You should also know that memory store isn't a
good choice for a production app - separate passenger or mongrel
instances won't share sessions
It's a known side effect of the code reloading stuff, but as I said
above, the memory store is not going to be a good solution for
deployment so if I were you I'd try and find a way not to rely on it.