I am trying to create a custom response to a particular action being called in my controller and I am getting some really weird errors. I am running the rails 1.2 stable branch. Here is the action in my controller: # GET /:year/:month/level/1 # GET /:year/:month/level/1.xml def show @level = Level.find(params[:id]) @assets = @level.assests.find_by_year_month(params[:year], params[:month]) respond_to do |format| format.html # show.rhtml format.xml { @level.to_xml :include => [ @assests ] } end end Here are the models: class Level < ActiveRecord::Base has_many :assets end class Asset < ActiveRecord::Base belongs_to :level def self.find_by_year_month(year, month) requested_date = Date.new(year.to_i, month.to_i, 1) from = requested_date - 1 to = requested_date >> 1 find_with_deleted(:all, :conditions => ["created_at < ? AND ( deleted_at IS NULL " + "OR deleted_at < ? AND deleted_at > ? )", to, to, from ]) end end I have written the find_by_year_month class method on the Asset model and it works great. When I run this action I get: NoMethodError in LevelsController#show You have a nil object when you didn''t expect it! The error occurred while evaluating nil.macro C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: 185:in `add_includes'' C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: 180:in `each'' C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: 180:in `add_includes'' C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: 232:in `to_s'' C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ xmlbase.rb:140:in `call'' C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ xmlbase.rb:140:in `_nested_structures'' C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ xmlbase.rb:60:in `method_missing'' C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ xmlbase.rb:32:in `__send__'' C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ xmlbase.rb:32:in `tag!'' C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: 230:in `to_s'' C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: 107:in `to_xml'' C:/../app/controllers/schedules_controller.rb:23:in `show'' C:/../app/controllers/schedules_controller.rb:21:in `show'' C:/../app/controllers/application.rb:32:in `set_timezone'' Apparently, the error occurs on line 185 of C:/../vendor/rails/ activerecord/lib/active_record/xml_serialization.rb in `add_includes'' I can''t figure out why this doesn''t work. According to the post Jamis Buck made ( http://weblog.jamisbuck.org/2006/3/27/web-services-rails-style ) this should work. Shouldn''t it? Any help would be greatly appreciated. Nicholas --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
It''s format.xml { @level.to_xml :include => [ :assests ] } Use symbols, not variables. However, given what you are trying to do takes parameters, you may be best off defining your own to_xml on Asset as the to_xml document page suggests: http://api.rubyonrails.org/classes/ActiveRecord/XmlSerialization.html#M000910 Jason On 4/23/07, Nicholas <nicholas.barthelemy-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > > I am trying to create a custom response to a particular action being > called in my controller and I am getting some really weird errors. I > am running the rails 1.2 stable branch. > > Here is the action in my controller: > # GET /:year/:month/level/1 > # GET /:year/:month/level/1.xml > def show > @level = Level.find(params[:id]) > @assets = @level.assests.find_by_year_month(params[:year], > params[:month]) > > respond_to do |format| > format.html # show.rhtml > format.xml { @level.to_xml :include => [ @assests ] } > end > end > > Here are the models: > class Level < ActiveRecord::Base > has_many :assets > end > > class Asset < ActiveRecord::Base > belongs_to :level > > def self.find_by_year_month(year, month) > requested_date = Date.new(year.to_i, month.to_i, 1) > from = requested_date - 1 > to = requested_date >> 1 > find_with_deleted(:all, > :conditions => ["created_at < ? AND ( deleted_at IS NULL " + > "OR deleted_at < ? AND deleted_at > ? )", to, to, from ]) > end > end > > I have written the find_by_year_month class method on the Asset model > and it works great. When I run this action I get: > > NoMethodError in LevelsController#show > > You have a nil object when you didn''t expect it! > The error occurred while evaluating nil.macro > > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > 185:in `add_includes'' > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > 180:in `each'' > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > 180:in `add_includes'' > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > 232:in `to_s'' > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > xmlbase.rb:140:in `call'' > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > xmlbase.rb:140:in `_nested_structures'' > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > xmlbase.rb:60:in `method_missing'' > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > xmlbase.rb:32:in `__send__'' > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > xmlbase.rb:32:in `tag!'' > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > 230:in `to_s'' > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > 107:in `to_xml'' > C:/../app/controllers/schedules_controller.rb:23:in `show'' > C:/../app/controllers/schedules_controller.rb:21:in `show'' > C:/../app/controllers/application.rb:32:in `set_timezone'' > > Apparently, the error occurs on line 185 of C:/../vendor/rails/ > activerecord/lib/active_record/xml_serialization.rb in `add_includes'' > > I can''t figure out why this doesn''t work. According to the post Jamis > Buck made ( http://weblog.jamisbuck.org/2006/3/27/web-services-rails-style > ) this should work. Shouldn''t it? > > Any help would be greatly appreciated. > > Nicholas > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
And of course no variable called @assests was set in the controller (although I see there is one called @assets). Uninitialized instance variables are treated as nil. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
That was a type-o on my part. I did check to make sure the variables match in my code, but thanks for pointing that out. - Nicholas On Apr 23, 3:55 pm, candlerb <b.cand...-e+AXbWqSrlAAvxtiuMwx3w@public.gmane.org> wrote:> And of course no variable called @assests was set in the controller > (although I see there is one called @assets). Uninitialized instance > variables are treated as nil.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I have tried the approach you''ve suggested and it does work. I just thought you could pass an array in the :include array as Jamis did in his post. def add company = params[:person].delete(:company) @company = Company.find_or_create_by_name(company[:name]) @person = @company.people.create(params[:person]) respond_to do |wants| wants.html { redirect_to(person_list_url) } wants.js wants.xml { render :xml => @person.to_xml(:include => @company) } end end The post was made on March 27th of 2006, so it easily could be invalid. Any thoughts? Nicholas On Apr 23, 3:50 pm, "Jason Roelofs" <jameskil...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> It''s > > format.xml { @level.to_xml :include => [ :assests ] } > > Use symbols, not variables. However, given what you are trying to do takes > parameters, you may be best off defining your own to_xml on Asset as the > to_xml document page suggests: > > http://api.rubyonrails.org/classes/ActiveRecord/XmlSerialization.html... > > Jason > > On 4/23/07, Nicholas <nicholas.barthel...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > I am trying to create a custom response to a particular action being > > called in my controller and I am getting some really weird errors. I > > am running the rails 1.2 stable branch. > > > Here is the action in my controller: > > # GET /:year/:month/level/1 > > # GET /:year/:month/level/1.xml > > def show > > @level = Level.find(params[:id]) > > @assets = @level.assests.find_by_year_month(params[:year], > > params[:month]) > > > respond_to do |format| > > format.html # show.rhtml > > format.xml { @level.to_xml :include => [ @assests ] } > > end > > end > > > Here are the models: > > class Level < ActiveRecord::Base > > has_many :assets > > end > > > class Asset < ActiveRecord::Base > > belongs_to :level > > > def self.find_by_year_month(year, month) > > requested_date = Date.new(year.to_i, month.to_i, 1) > > from = requested_date - 1 > > to = requested_date >> 1 > > find_with_deleted(:all, > > :conditions => ["created_at < ? AND ( deleted_at IS NULL " + > > "OR deleted_at < ? AND deleted_at > ? )", to, to, from ]) > > end > > end > > > I have written the find_by_year_month class method on the Asset model > > and it works great. When I run this action I get: > > > NoMethodError in LevelsController#show > > > You have a nil object when you didn''t expect it! > > The error occurred while evaluating nil.macro > > > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > > 185:in `add_includes'' > > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > > 180:in `each'' > > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > > 180:in `add_includes'' > > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > > 232:in `to_s'' > > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > > xmlbase.rb:140:in `call'' > > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > > xmlbase.rb:140:in `_nested_structures'' > > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > > xmlbase.rb:60:in `method_missing'' > > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > > xmlbase.rb:32:in `__send__'' > > C:/../vendor/rails/activesupport/lib/active_support/vendor/builder/ > > xmlbase.rb:32:in `tag!'' > > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > > 230:in `to_s'' > > C:/../vendor/rails/activerecord/lib/active_record/xml_serialization.rb: > > 107:in `to_xml'' > > C:/../app/controllers/schedules_controller.rb:23:in `show'' > > C:/../app/controllers/schedules_controller.rb:21:in `show'' > > C:/../app/controllers/application.rb:32:in `set_timezone'' > > > Apparently, the error occurs on line 185 of C:/../vendor/rails/ > > activerecord/lib/active_record/xml_serialization.rb in `add_includes'' > > > I can''t figure out why this doesn''t work. According to the post Jamis > > Buck made (http://weblog.jamisbuck.org/2006/3/27/web-services-rails-style > > ) this should work. Shouldn''t it? > > > Any help would be greatly appreciated. > > > Nicholas--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---