Antoine
2009-Jan-08 20:39 UTC
tracking_attribute_changes and using default checkbox form in the view
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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Antoine
2009-Jan-12 16:05 UTC
Re: tracking_attribute_changes and using default checkbox form in the view
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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Eloy Duran
2009-Jan-12 16:14 UTC
Re: tracking_attribute_changes and using default checkbox form in the view
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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Eloy Duran
2009-Jan-12 16:18 UTC
Re: tracking_attribute_changes and using default checkbox form in the view
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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Antoine
2009-Jan-12 16:27 UTC
Re: tracking_attribute_changes and using default checkbox form in the view
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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Eloy Duran
2009-Jan-12 18:06 UTC
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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Ben Symonds
2009-Jan-12 19:30 UTC
Re: tracking_attribute_changes and using default checkbox form in the view
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-core@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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Eloy Duran
2009-Jan-13 07:44 UTC
Re: tracking_attribute_changes and using default checkbox form in the view
Ah sorry, I shouldn''t have assumed edge. My bad. Thanks Ben - Eloy On Jan 12, 2009, at 8:30 PM, Ben Symonds wrote:> > 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-core@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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Antoine
2009-Jan-13 17:22 UTC
Re: tracking_attribute_changes and using default checkbox form in the view
Thank you Ben for your answer ;-) Do you know when the patch will be available in rails ? Best regards ;-) Antoine On Jan 13, 2:44 am, Eloy Duran <eloy.de.en...@gmail.com> wrote:> Ah sorry, I shouldn''t have assumed edge. My bad. > Thanks Ben > > - Eloy > > On Jan 12, 2009, at 8:30 PM, Ben Symonds wrote: > > > > > This looks likehttp://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-core@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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Michael Koziarski
2009-Jan-13 19:32 UTC
Re: tracking_attribute_changes and using default checkbox form in the view
It will be available in the next point release we do from the 2.2 branch (2.2.3) hopefully that will come out relatively soon as there''s a few fixes piled up. On Wed, Jan 14, 2009 at 6:22 AM, Antoine <antoine.faucher@gmail.com> wrote:> > Thank you Ben for your answer ;-) > Do you know when the patch will be available in rails ? > > Best regards ;-) > > Antoine > > > On Jan 13, 2:44 am, Eloy Duran <eloy.de.en...@gmail.com> wrote: >> Ah sorry, I shouldn''t have assumed edge. My bad. >> Thanks Ben >> >> - Eloy >> >> On Jan 12, 2009, at 8:30 PM, Ben Symonds wrote: >> >> >> >> > This looks likehttp://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-core@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 > > >-- Cheers Koz --~--~---------~--~----~------------~-------~--~----~ 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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
Stephen Bannasch
2009-May-15 17:53 UTC
tracking_attribute_changes and using default checkbox form in the view
>It will be available in the next point release we do from the 2.2 >branch (2.2.3) hopefully that will come out relatively soon as there''s >a few fixes piled up. > >On Wed, Jan 14, 2009 at 6:22 AM, Antoine <antoine.faucher@gmail.com> wrote: >> >> Thank you Ben for your answer ;-) >> Do you know when the patch will be available in rails ? >> >> Best regards ;-) >> >> Antoine >> >> >> On Jan 13, 2:44 am, Eloy Duran <eloy.de.en...@gmail.com> wrote: >>> Ah sorry, I shouldn''t have assumed edge. My bad. >>> Thanks Ben >>> >>> - Eloy >>> >>> On Jan 12, 2009, at 8:30 PM, Ben Symonds wrote: >>> >>> >>> >>> > This looks likehttp://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-core@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 >> > >> > > > >-- >Cheers > >Koz > >