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 <[email protected]> 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 <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---