Permalink
Browse files

Allow writing unknown attributes, but with a deprecation warning. Clo…

…ses #4583.
  • Loading branch information...
1 parent 0bfc504 commit b2955edcea63e3daa347dc4e05b9abd380176ac8 @jonleighton jonleighton committed Jan 31, 2012
View
11 activerecord/lib/active_record/attribute_methods/write.rb
@@ -28,11 +28,14 @@ def write_attribute(attr_name, value)
@attributes_cache.delete(attr_name)
column = column_for_attribute(attr_name)
- if column || @attributes.has_key?(attr_name)
- @attributes[attr_name] = type_cast_attribute_for_write(column, value)
- else
- raise ActiveModel::MissingAttributeError, "can't write unknown attribute `#{attr_name}'"
+ unless column || @attributes.has_key?(attr_name)
+ ActiveSupport::Deprecation.warn(
+ "You're trying to create an attribute `#{attr_name}'. Writing arbitrary " \
+ "attributes on a model is deprecated. Please just use `attr_writer` etc."
+ )
end
+
+ @attributes[attr_name] = type_cast_attribute_for_write(column, value)
end
alias_method :raw_write_attribute, :write_attribute
View
7 activerecord/test/cases/attribute_methods_test.rb
@@ -780,6 +780,13 @@ def parent.inherited(k)
assert_deprecated { klass.define_attribute_methods }
end
+ def test_setting_new_attributes_deprecated
+ t = Topic.new
+ assert_deprecated { t[:foo] = "bar" }
+ assert_equal "bar", t.foo
+ assert_equal "bar", t[:foo]
+ end
+
private
def cached_columns
@cached_columns ||= time_related_columns_on_topic.map(&:name)

0 comments on commit b2955ed

Please sign in to comment.