On 23 Dec 2008, at 15:44, [email protected] wrote:

>
>
> I'm not sure which model is causing the problem. I am now trapping

It would be the model being saved/created. A method called changed  
would cause a problem for example.

Fred

>
> 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 <[email protected]> wrote:
>> On 23 Dec 2008, at 14:04, [email protected] 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 <[email protected]>  
>>> wrote:
>>>> On Dec 20, 1:52 pm,
>>>> "[email protected]"<[email protected]> 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, "[email protected]"
>>
>>>>> <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to