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
-~----------~----~----~----~------~----~------~--~---