Greetings, I''m in the throws of deploying an app on site5, and I''m getting strange errors. I think I might need to understand how error_messages_for works. I get a pretty standard looking error: " You have a nil object when you didn''t expect it! You might have expected an instance of ActiveRecord::Base. The error occured while evaluating nil.errors Extracted source (around line #7): 4: 5: <div class="admin_content_row"> 6: <% @title = ''Upload New Image'' %> 7: <%= error_messages_for(''image'') %> " the production box is apache fastcgi linux, my dev box is windows webrick. This seems odd to me because I''ve never had to instantiate a class, or check for it in order to use the error_messages_for method in my pages. Is it a versioning thing maybe? Jason -- Posted via http://www.ruby-forum.com/.
have you tried using the symbol :image instead of "image"? On 6/13/06, Jason Pfeifer <jpfeifer@shaw.ca> wrote:> Greetings, > > I''m in the throws of deploying an app on site5, and I''m getting strange > errors. I think I might need to understand how error_messages_for > works. > > I get a pretty standard looking error: > > " > You have a nil object when you didn''t expect it! > You might have expected an instance of ActiveRecord::Base. > The error occured while evaluating nil.errors > > Extracted source (around line #7): > > 4: > 5: <div class="admin_content_row"> > 6: <% @title = ''Upload New Image'' %> > 7: <%= error_messages_for(''image'') %> > " > > the production box is apache fastcgi linux, my dev box is windows > webrick. This seems odd to me because I''ve never had to instantiate a > class, or check for it in order to use the error_messages_for method in > my pages. Is it a versioning thing maybe? > > Jason > > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
Jason Pfeifer wrote:> You have a nil object when you didn''t expect it! > You might have expected an instance of ActiveRecord::Base. > The error occured while evaluating nil.errors > > Extracted source (around line #7): > > 4: > 5: <div class="admin_content_row"> > 6: <% @title = ''Upload New Image'' %> > 7: <%= error_messages_for(''image'') %>It looks like the variable @image doesn''t exist by the time the view is rendered. ''image'' in your example is supposed to be the name of an instance variable. Make sure you assign an object @image in your controller. -- Posted via http://www.ruby-forum.com/.
> It looks like the variable @image doesn''t exist by the time the view is > rendered. ''image'' in your example is supposed to be the name of an > instance variable. Make sure you assign an object @image in your > controller.symbol :image doesn''t work. isn''t error_messages_for used primarily for validation errors on your models? I thought there was implicit mapping to a model in the rails framework - just wondering why it works perfectly on development (and on a different production server I tried it didn''t error either) and errors at site5. I think the gems might be different versions which is my suspicion, but does anyone know anything else? Jason -- Posted via http://www.ruby-forum.com/.
if you pass a nil object to error_messages_for, the method should simply return "" Here''s the definition: def error_messages_for(object_name, options = {}) options = options.symbolize_keys object = instance_variable_get("@#{object_name}") if object && !object.errors.empty? content_tag("div", content_tag( options[:header_tag] || "h2", "#{pluralize(object.errors.count, "error")} prohibited this #{object_name.to_s.gsub("_", " ")} from being saved" ) + content_tag("p", "There were problems with the following fields:") + content_tag("ul", object.errors.full_messages.collect { |msg| content_tag("li", msg) }), "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation" ) else "" end end if you try "helper.error_message_for(nil)" you should get back "". give it a try Mike On 6/13/06, Jason Pfeifer <jpfeifer@shaw.ca> wrote:> > It looks like the variable @image doesn''t exist by the time the view is > > rendered. ''image'' in your example is supposed to be the name of an > > instance variable. Make sure you assign an object @image in your > > controller. > > symbol :image doesn''t work. > > isn''t error_messages_for used primarily for validation errors on your > models? I thought there was implicit mapping to a model in the rails > framework - just wondering why it works perfectly on development (and on > a different production server I tried it didn''t error either) and errors > at site5. I think the gems might be different versions which is my > suspicion, but does anyone know anything else? > > Jason > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
Hi, I am getting the same error with ''error_messages_for''. the isn''t any way of validating the error on the Image model. Because what I want to do is to validate the text_field, which I have define the validation method on Image model. You have a nil object when you didn''t expect it! You might have expected an instance of ActiveRecord::Base. The error occured while evaluating nil.errors Extracted source (around line #3): 1: <h2><%= @page_title = "Fax Number" -%></h2> 2: 3: <%= error_messages_for("fax") %> 4: <%= stylesheet_link_tag "scaffold", "email", :media => "all" %> 5: 6: <p style="color: blue"><%= flash[:notice] %> Thanx Steve -- Posted via http://www.ruby-forum.com/.
Hi, I did figure out what was the problem. on your controller index just define your class, my model name is fax.rb @fax = Fax.new. here is the full code..... class FaxController < ApplicationController def save_faxno @fax = Fax.new(params[:faxes]) if @fax.save flash[:notice] = ''Fax number was successful Inserted.'' redirect_to :action => ''index'' return else render(:action => ''fax'') return end end def index @fax = Fax.new render :action => ''fax'' end end> > Thanx > Steve-- Posted via http://www.ruby-forum.com/.
Mike Garey wrote:> if you pass a nil object to error_messages_for, the method should > simply return "" > Here''s the definition: > ...Thanks, this was a good hint for me. I had a similar problem as Jason. My application had worked for quite some time and then all of a sudden the "error occured while evaluating nil.errors". Well, it was not all of a sudden, after all. The problem was that I installed the Globalize plugin which shadows the original Rails Active Record Helper to provide localized error messages. The shadowing code does not include test for the object==nil case. When you add it, the above error is gone and my application behaves as before (even better - getting globalized ;-). For details, see diff: Index: active_record_helper.rb ==================================================================--- active_record_helper.rb (Globalize for_1.1) +++ active_record_helper.rb (working copy) @@ -16,7 +16,7 @@ def error_messages_for(object_name, options = {}) options = options.symbolize_keys object = instance_variable_get("@#{object_name}") - unless object.errors.empty? + if object && !object.errors.empty? content_tag("div", content_tag( options[:header_tag] || "h2", @@ -26,6 +26,8 @@ content_tag("ul", object.errors.full_messages.collect { |msg| content_tag("li", msg) }), "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation" ) + else + "" end end end -- Posted via http://www.ruby-forum.com/.