提交 1bdc395d 编写于 作者: S Sean Griffin

Make the second argument to `attribute` optional

While working on updating Paper Trail for 5.1 compatibility, I noticed
that I was required to pass a second argument to `attribute`. I didn't
intend for this to be the case, as `attribute :foo` is totally
reasonable shorthand for "I want `attr_accessor :foo`, but also have it
work with things like `.attributes` and `ActiveRecord::Dirty`"
上级 ef993d36
* Change the type argument of `ActiveRecord::Base#attribute` to be optional.
The default is now `ActiveRecord::Type::Value.new`, which provides no type
casting behavior.
*Sean Griffin*
* Fix that unsigned with zerofill is treated as signed.
Fixes #27125.
......
......@@ -191,7 +191,7 @@ module ClassMethods
# tracking is performed. The methods +changed?+ and +changed_in_place?+
# will be called from ActiveModel::Dirty. See the documentation for those
# methods in ActiveModel::Type::Value for more details.
def attribute(name, cast_type, **options)
def attribute(name, cast_type = Type::Value.new, **options)
name = name.to_s
reload_schema_from_cache
......
......@@ -255,5 +255,13 @@ def deserialize(*)
assert_includes inspection, "non_existent_decimal"
end
test "attributes do not require a type" do
klass = Class.new(OverloadedType) do
attribute :no_type
end
assert_equal 1, klass.new(no_type: 1).no_type
assert_equal "foo", klass.new(no_type: "foo").no_type
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册