提交 4ea06701 编写于 作者: R Ryuta Kamizono

Merge pull request #29651 from Sayanc93/return-correct-date

Return correct date in ActiveModel for time to date conversions
* Fix year value when casting a multiparameter time hash
* Fix date value when casting a multiparameter date hash to not convert
from Gregorian date to Julian date.
Before:
Day.new({"day(1i)"=>"1", "day(2i)"=>"1", "day(3i)"=>"1"})
=> #<Day id: nil, day: "0001-01-03", created_at: nil, updated_at: nil>
After:
Day.new({"day(1i)"=>"1", "day(2i)"=>"1", "day(3i)"=>"1"})
=> #<Day id: nil, day: "0001-01-01", created_at: nil, updated_at: nil>
Fixes #28521.
*Sayan Chakraborty*
* Fix year value when casting a multiparameter time hash.
When assigning a hash to a time attribute that's missing a year component
(e.g. a `time_select` with `:ignore_date` set to `true`) then the year
......
......@@ -46,7 +46,7 @@ def new_date(year, mon, mday)
def value_from_multiparameter_assignment(*)
time = super
time && time.to_date
time && new_date(time.year, time.mon, time.mday)
end
end
end
......
......@@ -18,6 +18,17 @@ def test_type_cast_date
assert_equal date_string, type.cast(date_string).strftime("%F")
assert_equal date_string, type.cast(values_hash).strftime("%F")
end
def test_returns_correct_year
type = Type::Date.new
time = ::Time.utc(1, 1, 1)
date = ::Date.new(time.year, time.mon, time.mday)
values_hash_for_multiparameter_assignment = { 1 => 1, 2 => 1, 3 => 1 }
assert_equal date, type.cast(values_hash_for_multiparameter_assignment)
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册