I'm not sure which model is causing the problem. I am now trapping
exceptions and the error first occurs when I execute root.save (see
***1***). 'root' is an instance of my Property model. I also get the
same error when executing code *** 2 *** (which follows the execution
of *** 1 ***) - member.save forces another (different) instance of
Property to be saved to the properties table which again triggers the
same error. FYI 'member.create_default_characteristics(user)' (in ***
2 ***) calls create_root() (*** 1 ***). The log file also suggests
that both errors are raised on an INSERT into my properties table.

*** 1 ***

    def create_root(administrator)
        begin
        root = create_root_collection(self.pingee_name,
                                      administrator,
                                      GlobalAccessibility.new,
                                      OwnerAccessibility.new)
        root.save
        rescue Exception => exe
          logger.info("*** Member.create_root #{exe} #{root.name.to_s}
***")
        end
        self.root = root
    end

*** 2 ***
    def self.add_member_for_user(user)
        member = new(:user_id => user.id, :pingee_name =>
user.pingee_name)
        # Create the member's default characteristics and save it all
to the database in a single
        # transaction
        begin
            transaction do
                member.create_default_characteristics(user)
                member.save!
            end
            member
        rescue Exception => exe
          logger.info("*** Member.add_member_for_user #{exe} ***")
        end
    end


On 23 Dec, 15:19, Frederick Cheung <frederick.che...@gmail.com> wrote:
> On 23 Dec 2008, at 14:04, lee.longm...@googlemail.com wrote:
>
>
>
> > I have checked for method/association name clashes and can't see any.
> > Any tips on how I might debug this further would be very much
> > appreciated - I am completely stuck!
>
> You could start by showing the code in your model. If you've got any
> plugins you're using it's worth making sure they aren't the problem
>
> Fred
>
>
>
> > To recap, I am getting the error "undefined method `each' for
> > true:TrueClass" when an Active Record method (in active_record/base.rb
> > - see below) is being executed. So I assume 'attribute_names' is being
> > set to true for some reason.
>
> >      # Returns a copy of the attributes hash where all the values
> > have been safely quoted for use in
> >      # an SQL statement.
> >      def attributes_with_quotes(include_primary_key = true,
> > include_readonly_attributes = true, attribute_names =
> > @attributes.keys)
> >        quoted = {}
> >        connection = self.class.connection
> >        attribute_names.each do |name|
> >          if (column = column_for_attribute(name)) &&
> > (include_primary_key || !column.primary)
> >            value = read_attribute(name)
>
> >            # We need explicit to_yaml because quote() does not
> > properly convert Time/Date fields to YAML.
> >            if value && self.class.serialized_attributes.has_key?
> > (name) && (value.acts_like?(:date) || value.acts_like?(:time))
> >              value = value.to_yaml
> >            end
>
> >            quoted[name] = connection.quote(value, column)
> >          end
> >        end
> >        include_readonly_attributes ? quoted :
> > remove_readonly_attributes(quoted)
> >      end
>
> > On 20 Dec, 14:26, Frederick Cheung <frederick.che...@gmail.com> wrote:
> >> On Dec 20, 1:52 pm,
> >> "lee.longm...@googlemail.com"<lee.longm...@googlemail.com> wrote:
> >>> To add, I am seeing the following when I retrieve an existing Root
> >>> object in the Rails console and then try to save it again:
>
> >> My guess would be that you have a method or an association with a
> >> name
> >> that has since been used internally by activerecord. If you can show
> >> more of your model someone might be able to spot the troublemaker.
>
> >> Fred
>
> >>> => #<Root id: 1, type: "Root", name: "Base of Administrator",
> >>> yaml_container: nil, parent_id: nil, owner_id: 1, custodian_id: 1,
> >>> property_control_id: 1, include_parent_responses: false,
> >>> inheritable:
> >>> false, response_vehicle_id: nil, acquire_child_values: false,
> >>> description: nil, rating: nil, link_base_id: nil, base_image_id:
> >>> nil,
> >>> event_when_id: nil, event_description_id: nil>>> root.save
>
> >>> NoMethodError: undefined method `each' for true:TrueClass
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> base.rb:2808:in `attributes_with_quotes'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> base.rb:2706:in `update_without_lock'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> locking/optimistic.rb:70:in `update_without_dirty'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> dirty.rb:146:in `update_without_callbacks'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> callbacks.rb:253:in `update_without_timestamps'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> timestamp.rb:38:in `update'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> base.rb:2699:in `create_or_update_without_callbacks'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> callbacks.rb:222:in `create_or_update'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> base.rb:2383:in `save_without_validation'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> validations.rb:1009:in `save_without_dirty'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> dirty.rb:79:in `save_without_transactions'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> transactions.rb:179:in `send'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> transactions.rb:179:in `with_transaction_returning_status'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> connection_adapters/abstract/database_statements.rb:66:in
> >>> `transaction'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> transactions.rb:129:in `transaction'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> transactions.rb:138:in `transaction'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> transactions.rb:178:in `with_transaction_returning_status'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> transactions.rb:146:in `save'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> transactions.rb:158:in `rollback_active_record_state!'
> >>>        from /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/
> >>> active_record/
> >>> transactions.rb:146:in `save'
>
> >>> Any thoughts much appreciated.
>
> >>> On 20 Dec, 06:54, "lee.longm...@googlemail.com"
>
> >>> <lee.longm...@googlemail.com> wrote:
> >>>> I have been working through an upgrade of my 1.2.6 application to
> >>>> 2.2.2.
>
> >>>> I am almost there but I have hit a problem with ActiveRecord.
>
> >>>> Before the upgrade, the following code was working fine.
>
> >>>>    def create_root(administrator)
> >>>>        root = create_root_collection(self.pingee_name,
> >>>>                                      administrator,
> >>>>                                      GlobalAccessibility.new,
> >>>>                                      OwnerAccessibility.new)
> >>>>        root.save
> >>>>        self.root = root
> >>>>    end
>
> >>>> But now I get am getting an exception "undefined method `each' for
> >>>> true:TrueClass" when root.save is executed.
>
> >>>> fyi, the "create_root_collection" method creates a "root" object
> >>>> and
> >>>> assigns new object to its "belongs to" association.
>
> >>>> I have traced it through carefully and it is definitely failing
> >>>> when
> >>>> trying to save the "root" object itself.
>
> >>>> Given the error message, and the fact that the root object contains
> >>>> boolean columns, I wonder if the problem is to do with the saving
> >>>> boolean values. I am using MySQL and declaring the boolean
> >>>> columns in
> >>>> the following way (using raw SQL not migrations currently):
>
> >>>> include_parent_responses boolean default false not null,
>
> >>>> Is the "boolean" column type still valid?
>
> >>>> Thanks!
--~--~---------~--~----~------------~-------~--~----~
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@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to