Adam17
(Adam)
May 19, 2008, 11:51am
1
I've a problem in, my view where the object found via find method,
cant be seen
i get a
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.to_sym
Error every time i try to edit the record, the weird thing is that in
the debugger the object is created
I use restful routing for news
in routes.rb
map.resources :news, :singular=>:news_instance
In the view
<% form_for @news do |n| %>
<%= render :partial=>'form', :locals=>{:n=>n,:btn_name=>'dodaj'}
%>
<% end %>
I gues this could be a bug (?)
Anyway to get around it?
Can you post the full trace dump?
AndyV
(AndyV)
May 19, 2008, 3:52pm
3
Can you post the backtrace?
What he said! Great minds think alike!
Adam17
(Adam)
May 19, 2008, 6:59pm
5
here it goes:
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
activesupport-2.0.2/lib/active_support/core_ext/hash/keys.rb:27:in
`symbolize_keys'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
activesupport-2.0.2/lib/active_support/core_ext/hash/keys.rb:26:in
`each'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
activesupport-2.0.2/lib/active_support/core_ext/hash/keys.rb:26:in
`inject'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
activesupport-2.0.2/lib/active_support/core_ext/hash/keys.rb:26:in
`symbolize_keys'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/helpers/url_helper.rb:69:in `url_for'
(eval):17:in `news_path'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/polymorphic_routes.rb:27:in
`polymorphic_url'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/polymorphic_routes.rb:31:in
`polymorphic_path'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/helpers/form_helper.rb:200:in
`apply_form_for_options!'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/helpers/form_helper.rb:179:in
`form_for'
app/views/news/edit.html.erb:4:in
`_run_erb_47app47views47news47edit46html46erb'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/base.rb:637:in
`compile_and_render_template'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/base.rb:365:in `render_template'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_view/base.rb:316:in `render_file'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/base.rb:1100:in
`render_for_file'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/base.rb:836:in `render'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/layout.rb:262:in
`render_with_a_layout'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/benchmarking.rb:51:in
`render_with_benchmark'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/1.8/benchmark.rb:
293:in `measure'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/benchmarking.rb:51:in
`render_with_benchmark'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/base.rb:1153:in
`default_render'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/base.rb:1159:in
`perform_action'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/filters.rb:697:in
`call_filters'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/filters.rb:689:in
`perform_action_with_filters'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in
`perform_action_with_benchmark'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/1.8/benchmark.rb:
293:in `measure'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in
`perform_action_with_benchmark'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/rescue.rb:199:in
`perform_action_with_rescue'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/caching.rb:678:in
`perform_action_with_caching'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
activerecord-2.0.2/lib/active_record/connection_adapters/abstract/
query_cache.rb:33:in `cache'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
activerecord-2.0.2/lib/active_record/query_cache.rb:8:in `cache'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/caching.rb:677:in
`perform_action_with_caching'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/base.rb:524:in `process'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/filters.rb:685:in
`process_with_filters'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/session_management.rb:123:in
`process_with_session_management_support'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/base.rb:388:in `process'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/dispatcher.rb:171:in
`handle_request'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/dispatcher.rb:115:in `dispatch'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/dispatcher.rb:126:in
`dispatch_cgi'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.0.2/lib/action_controller/dispatcher.rb:9:in `dispatch'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
rails-2.0.2/lib/webrick_server.rb:112:in `handle_dispatch'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/gems/1.8/gems/
rails-2.0.2/lib/webrick_server.rb:78:in `service'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/1.8/webrick/
httpserver.rb:104:in `service'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/1.8/webrick/
httpserver.rb:65:in `run'
/usr/local/netbeans-6.1/ruby2/jruby-1.1/lib/ruby/1.8/webrick/server.rb:
173:in `start_thread'
:1:in `start'
AndyV
(AndyV)
May 19, 2008, 7:22pm
6
The backtrace shows that there's a problem in line 4 but you've only
shown 3 lines from the template. My guess is that there is something
wonky in the partial that you're including (which means there are two
lines before the render :partial). If you can show the partial and
the edit method we might get somewhere.
Adam17
(Adam)
May 19, 2008, 8:01pm
7
<%= render :partial=>'menu' %>
<%= error_messages_for :news %>
<%unless @news.nil ?%>
<% form_for @news do |n| %>
<%= render :partial=>'form', :locals=>{:n=>n,:btn_name=>'add'} %>
<% end %>
<%end%>
the partial _menu
<div class="submenu">
<ul>
<li class='label'>
news
</li>
<%= '<li>' + link_to('add',new_news_instance_path,
{:class=>:add}) + '</li>' if session[:user_level]>1 %>
<li>
<%= link_to 'list',news_path,
{:class=>:list,:title=>"list"} %>
</li>
</ul>
<div class="clear"></div>
</div>
I am thinking that one of the items in the @news object is nil
You check to see if the object is nil, but not each item
<%unless @news.nil ?%>
<% form_for @news do |n| %>
#<%= render :partial=>'form', :locals=>{:n=>n,:btn_name=>'add'}
%>
<%= (render :partial=>'form', :locals=>{:n=>n,:btn_name=>'add'})
if n %>
<% end %>
<%end%>
Just my guess. Lets see what Andy finds.
Adam17
(Adam)
May 19, 2008, 8:37pm
9
I did that check after the errors started to pop out and i couldn't
find the solution ;/
I am a little confused about how you are calling the partial. I think
Rails will interate through all the items in the @news array (if it is
an array) in the partial without you having to do so explicitly. I am
not at a spot where I can look it up right now.
radar
(Ryan Bigg)
May 19, 2008, 11:43pm
11
And yet, you still haven’t shown us the controller code!
Please do.
Adam17
(Adam)
May 20, 2008, 8:59am
12
the controller for the edit action
def edit
@news = News.find(params[:id])
end
def update
@news = News.find(params[:id])
respond_to do |format|
if @news.update_attributes (params[:news])
format.html { redirect_to(@news ) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @news.errors , :status
=> :unprocessable_entity }
end
end
end
AndyV
(AndyV)
May 20, 2008, 12:08pm
13
I have a feeling that the root of the problem is with the name of your
class.
"news".puralize
#=> "news"
If I am correct, the code is having trouble with an ambiguous route on
line 8 of your partial:
<%= link_to 'list',news_path, {:class=>:list,:title=>"list"} %>
The framework is assuming that 'news_path' is the name of a _singular_
route (rather than the name of the collection/index) and it's looking
for an instance of the News class upon which to call to_param so that
it can build a path along the lines of news_path(:news_id=>@news).
The 'rails-magic' that transforms the instance into a symbolized key
for the hash is unhappy.