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

Reply via email to