Re: [Rails-core] has_one association caching - breaks
If someone could apply this that would be fantastic.Patch attached.-Jonathan.On 8/13/06, Richard Livsey [EMAIL PROTECTED] wrote:Jonathan Viney wrote: I'd already mentioned this... http://dev.rubyonrails.org/ticket/5767 -Jonathan.Cool. Had a look on trac but didn't see the ticket.Then again I have been up for 36hrs straight so I probably stared right at it and still didn't see it!--Richard Livseyhttp://livsey.org___Rails-core mailing list Rails-core@lists.rubyonrails.orghttp://lists.rubyonrails.org/mailman/listinfo/rails-core has_one_cached_nil_association.diff Description: Binary data ___ Rails-core mailing list Rails-core@lists.rubyonrails.org http://lists.rubyonrails.org/mailman/listinfo/rails-core
Re: [Rails-core] has_one association caching - breaks
Rick Olson wrote: On 8/8/06, Michael A. Schoen [EMAIL PROTECTED] wrote: David Heinemeier Hansson wrote: So...is this intentional? Would core be open to a patch that allowed AR to differentiate between nil -- this association needs to be loaded and nil -- the target is actually nil? Yes, please do investigate something better. I believe it was done simply because it was easy at the time. http://dev.rubyonrails.org/ticket/5757 Good stuff, applied. Now to figure this out for eager associations... :) I've just run into a problem with this. If you have a has_one with no associated object and try and access the association before saving, it dies when saving. Bit of an obscure explanation, let me illustrate it: Assuming the following (and an Account class to go with it) class Company ActiveRecord::Base has_one :account end company = Company.new = Company:. company.save = true company.account = nil company.save E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:123:in `send' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:123:in `method_missing' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:336:in `callback' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:335:in `callback' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:330:in `each' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:330:in `callback' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:243:in `create_or_update' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/base.rb:1489:in `save_without_validation' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/validations.rb:744:in `save_without_transactions' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:120:in `save' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:120:in `transaction' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:86:in `transaction' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:112:in `transaction' E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:120:in `save' Attached is a diff containing a test for the associations tests which shows this behaviour. Thanks. Index: associations_test.rb === --- associations_test.rb(revision 4721) +++ associations_test.rb(working copy) @@ -101,6 +101,14 @@ assert_queries(0) { companies(:another_firm).account } end + def test_saving_has_one_with_nil_value +assert a = companies(:first_firm) +a.account = nil +assert a.save +assert_equal nil, a.account +assert a.save + end + def test_proxy_assignment company = companies(:first_firm) assert_nothing_raised { company.account = company.account } ___ Rails-core mailing list Rails-core@lists.rubyonrails.org http://lists.rubyonrails.org/mailman/listinfo/rails-core
Re: [Rails-core] has_one association caching - breaks
I'd already mentioned this...http://dev.rubyonrails.org/ticket/5767-Jonathan.On 8/13/06, Richard Livsey [EMAIL PROTECTED] wrote: Rick Olson wrote: On 8/8/06, Michael A. Schoen [EMAIL PROTECTED] wrote: David Heinemeier Hansson wrote: So...is this intentional? Would core be open to a patch that allowed AR to differentiate between nil -- this association needs to be loaded and nil -- the target is actually nil? Yes, please do investigate something better. I believe it was done simply because it was easy at the time. http://dev.rubyonrails.org/ticket/5757 Good stuff, applied.Now to figure this out for eager associations... :) I've just run into a problem with this. If you have a has_one with noassociated object and try and access the association before saving, itdies when saving.Bit of an obscure explanation, let me illustrate it: Assuming the following (and an Account class to go with it)class Company ActiveRecord::Basehas_one :accountendcompany = Company.new= Company:.company.save= true company.account= nilcompany.saveE:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:123:in`send'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:123:in `method_missing'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:336:in`callback'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:335:in `callback'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:330:in`each'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:330:in `callback'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/callbacks.rb:243:in`create_or_update'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/base.rb:1489:in `save_without_validation'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/validations.rb:744:in`save_without_transactions'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:120:in `save'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:120:in`transaction'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:86:in `transaction'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:112:in`transaction'E:/rails/thatsprogress/config/../vendor/rails/activerecord/lib/active_record/transactions.rb:120:in `save'Attached is a diff containing a test for the associations tests whichshows this behaviour.Thanks.Index: associations_test.rb=== --- associations_test.rb(revision 4721)+++ associations_test.rb(working copy)@@ -101,6 +101,14 @@ assert_queries(0) { companies(:another_firm).account } end+def test_saving_has_one_with_nil_value +assert a = companies(:first_firm)+a.account = nil+assert a.save+assert_equal nil, a.account+assert a.save+end+ def test_proxy_assignment company = companies(:first_firm) assert_nothing_raised { company.account = company.account }___Rails-core mailing listRails-core@lists.rubyonrails.org http://lists.rubyonrails.org/mailman/listinfo/rails-core ___ Rails-core mailing list Rails-core@lists.rubyonrails.org http://lists.rubyonrails.org/mailman/listinfo/rails-core
Re: [Rails-core] has_one association caching - breaks
Jonathan Viney wrote: I'd already mentioned this... http://dev.rubyonrails.org/ticket/5767 -Jonathan. Cool. Had a look on trac but didn't see the ticket. Then again I have been up for 36hrs straight so I probably stared right at it and still didn't see it! -- Richard Livsey http://livsey.org ___ Rails-core mailing list Rails-core@lists.rubyonrails.org http://lists.rubyonrails.org/mailman/listinfo/rails-core