This looks like http://rails.lighthouseapp.com/projects/8994/tickets/1530 (where the test Eloy mentions was added).
That patch has not been released yet, which is probably why Antoine is seeing it. Ben -----Original Message----- From: rubyonrails-core@googlegroups.com [mailto:rubyonrails-c...@googlegroups.com] On Behalf Of Eloy Duran Sent: 12 January 2009 18:06 To: rubyonrails-core@googlegroups.com Subject: [Rails-core] Re: tracking_attribute_changes and using default checkbox form in the view I checked the test cases (dirty_test.rb), and it contains a test for this specifically which passes at least on my env. def test_nullable_integer_zero_to_string_zero_not_marked_as_changed pirate = Pirate.new pirate.parrot_id = 0 pirate.save! # other tests pirate.parrot_id = '0' assert !pirate.changed? end Could you check this as well, and otherwise try to extract a small piece of code, into a test or sample app, which shows the behaviour? If you do so, please file a ticket. - Eloy On 12 jan 2009, at 17:27, Antoine wrote: > > You are right, I have a check box helper (by default, it's sending 0 > or 1 );-) and also my checkbox is represented in my database by an > integer ==> 0 means unchecked , 1 means check. > > So my form is sending 0 because my checkbox is unchecked and before > sending, the attribute of the object had the same value 0 (I checked > in the database to be sure) > > So I don't understand why rails tell me the state of this attribute > change ? because the attribute is not changing ... 0 ==> 0 > > Best regards, > Antoine > > > On Jan 12, 11:18 am, Eloy Duran <eloy.de.en...@gmail.com> wrote: >> Sorry, I forgot to add the most important part :) >> >> What might be happening is that you have a default value of nil >> (NULL) >> which is then changed to an empty string "". Because the browser >> sends >> a value because of the gotcha workaround. >> >> So the easiest solution would be to have a default value for the >> field. >> Which is something you want to have anyways for a boolean field IMO. >> >> - Eloy >> >> On Jan 12, 2009, at 5:14 PM, Eloy Duran wrote: >> >>> Hi, >> >>> This was probably because you used the check_box helper, which makes >>> sure the browser always sends a value. >>> See the documentation for the check_box helper: >> >>> === Gotcha >> >>> The HTML specification says unchecked check boxes are not >>> successful, and thus web browsers do not send them. Unfortunately >>> this introduces a gotcha: if an Invoice model has a paid flag, and >>> in the form that edits a paid invoice the user unchecks its check >>> box, no paid parameter is sent. So, any mass-assignment idiom like >>> @invoice.update_attributes(params[:invoice]) >>> wouldn't update the flag. >>> To prevent this the helper generates a hidden field with the same >>> name as the checkbox after the very check box. So, the client either >>> sends only the hidden field (representing the check box is >>> unchecked), or both fields. Since the HTML specification says key/ >>> value pairs have to be sent in the same order they appear in the >>> form and Rails parameters extraction always gets the first >>> occurrence of any given key, that works in ordinary forms. >> >>> - Eloy >> >>> On Jan 12, 2009, at 5:05 PM, Antoine wrote: >> >>>> Dear all, >> >>>> Maybe i wasn't so clear, excuse me for my english ;-) >> >>>> My problem is simple .. >>>> I didn't change the value of my checkboxes in my form but the core >>>> function of rails was saying that the values currently change ! and >>>> that's why rails update the values in mysql... and also return a >>>> wrong >>>> information if i use the new fontions like : attributes_change, >>>> attribute_changed?... >> >>>> I don't understand why ? >> >>>> thank you for your help ! >>>> Antoine >> >>>> On Jan 8, 3:39 pm, Antoine <antoine.fauc...@gmail.com> wrote: >>>>> Dear all, >> >>>>> I get a stupid bug and i don't know if there is something wrong in >>>>> rails or if it is me doing a stupid thing. >> >>>>> I have a checkbox called (ass_tg) in my form and when i saved my >>>>> form , i write in my model: >> >>>>> before_save :test >> >>>>> def test >>>>> puts "-----------------------" >>>>> puts ass_tg_change >>>>> puts "-------------------------" >>>>> end >> >>>>> I should have a nil answer but I get in my console : >> >>>>> ----------------------- >>>>> 0 >>>>> 0 >>>>> ------------------------- >> >>>>> And I have this attributes save in the SQL log ..(I didn't change >>>>> the >>>>> status of the checkbox ...) >> >>>>> UPDATE `companies` SET .... `ass_tg` = 0,...... WHERE `.... >> >>>>> It seems like rails don't like integer attributes equal to 0 >>>>> when it >>>>> execute all the change functions (change, changed?, was ...) ?? >> >>>>> Best regards, >> >>>>> Thank you for your help, >>>>> Antoine > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---