Hi,
Here is my problem : Sometimes validation is ignored, notably when
using << on a has_many collection. see the example.
# split.rb
class Split < ActiveRecord::Base
    # Associations
    belongs_to :account
    belongs_to :financial_transaction
    
    protected
        def validate
            errors.add_on_base(''dumb error'')
        end
end
# transaction_controller.rb
def test
    f = FinancialTransaction.new
    f.splits << Split.new
    render_text(''See log for inserts'')    
end
Result in production.log
Processing TransactionController#test (for 127.0.0.1 at Sat Dec 04
19:03:02 Paris, Madrid 2004)
  Parameters: {"action"=>"test", "id"=>nil,
"controller"=>"transaction"}
  [4;33mSQL (0.000000)   [1;37mPRAGMA
table_info(financial_transactions);
  [4;35mSQL (0.000000)   [0;37mPRAGMA table_info(splits);
  [4;33mSQL (0.010000)   [1;37mPRAGMA table_info(splits);
  [4;35mSQL (0.000000)   [0;37mBEGIN
  [4;33mSQL (0.000000)   [1;37mINSERT INTO splits
(''account_id'',
''valuedate'', ''amount'',
''financial_transaction_id'', ''comment'')
VALUES(NULL, NULL, NULL, NULL, NULL)
  [4;35mSQL (0.050000)   [0;37mCOMMIT
Completed in 0.200000 (4 reqs/sec) | DB: 0.060000 (30%)
Why is the split saved ? I think it shouldn''t because it''s not
valid isn''t it ?
Thanks
Michel Rasschaert
2004-Dec-04  18:12 UTC
Re: Validation not working with << on collection ?
I should add :
# financial_transaction.rb
require ''split''
class FinancialTransaction < ActiveRecord::Base
    # Associations
    has_many :splits
end
Thanks for your attention :)
On Sat, 4 Dec 2004 19:07:52 +0100, Michel Rasschaert
<michel.rasschaert-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Hi,
> 
> Here is my problem : Sometimes validation is ignored, notably when
> using << on a has_many collection. see the example.
> 
> # split.rb
> class Split < ActiveRecord::Base
>     # Associations
>     belongs_to :account
>     belongs_to :financial_transaction
> 
>     protected
>         def validate
>             errors.add_on_base(''dumb error'')
>         end
> end
> 
> # transaction_controller.rb
> def test
>     f = FinancialTransaction.new
>     f.splits << Split.new
>     render_text(''See log for inserts'')
> end
> 
> Result in production.log
> 
> Processing TransactionController#test (for 127.0.0.1 at Sat Dec 04
> 19:03:02 Paris, Madrid 2004)
>   Parameters: {"action"=>"test",
"id"=>nil, "controller"=>"transaction"}
>   [4;33mSQL (0.000000)   [1;37mPRAGMA
> table_info(financial_transactions);
>   [4;35mSQL (0.000000)   [0;37mPRAGMA table_info(splits);
>   [4;33mSQL (0.010000)   [1;37mPRAGMA table_info(splits);
>   [4;35mSQL (0.000000)   [0;37mBEGIN
>   [4;33mSQL (0.000000)   [1;37mINSERT INTO splits
(''account_id'',
> ''valuedate'', ''amount'',
''financial_transaction_id'', ''comment'')
> VALUES(NULL, NULL, NULL, NULL, NULL)
>   [4;35mSQL (0.050000)   [0;37mCOMMIT
> Completed in 0.200000 (4 reqs/sec) | DB: 0.060000 (30%)
> 
> Why is the split saved ? I think it shouldn''t because
it''s not valid isn''t it ?
> 
> Thanks
>
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Michel Rasschaert wrote:> Here is my problem : Sometimes validation is ignoredWhat other times is validation ignored?> notably when using << on a has_many collection. see the example.See Ticket #185: http://dev.rubyonrails.org/trac.cgi/ticket/185 I think << should only associate records, not silently create new ones or save/validate content fields. has_many << updates the associate record''s foreign key and has_and_belongs_to_many << inserts a row in the join table. Neither touches the associate record''s content; hence, neither requires full save/validation. jeremy -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (Darwin) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFBshvhAQHALep9HFYRAlNrAKC/kMQkVMykUdA1n+5LBjFoivPC1ACg3tK+ 1enl9ydqsumdssWVht+0sCo=my7b -----END PGP SIGNATURE-----