提交 9062b75b 编写于 作者: J Jon Leighton

Fully marshal AR::Base objects. Fixes #2431.

上级 7db90aa7
......@@ -937,17 +937,6 @@ def before_remove_const #:nodoc:
self.current_scope = nil
end
# Specifies how the record is loaded by +Marshal+.
#
# +_load+ sets an instance variable for each key in the hash it takes as input.
# Override this method if you require more complex marshalling.
def _load(data)
record = allocate
record.init_with(Marshal.load(data))
record
end
# Finder methods must instantiate through this method to work with the
# single-table inheritance model that makes it possible to create
# objects of different types from the same table.
......@@ -1588,16 +1577,6 @@ def init_with(coder)
self
end
# Specifies how the record is dumped by +Marshal+.
#
# +_dump+ emits a marshalled hash which has been passed to +encode_with+. Override this
# method if you require more complex marshalling.
def _dump(level)
dump = {}
encode_with(dump)
Marshal.dump(dump)
end
# Returns a String, which Action Pack uses for constructing an URL to this
# object. The default implementation returns this record's id as a String,
# or nil if this record's unsaved.
......
......@@ -1813,6 +1813,19 @@ def test_marshal_round_trip
assert_equal expected.attributes, actual.attributes
end
def test_marshal_new_record_round_trip
post = Marshal.load(Marshal.dump(Post.new))
assert post.new_record?, "should be a new record"
end
def test_marshalling_with_associations
post = Post.new
post.comments.build
post = Marshal.load(Marshal.dump(post))
assert_equal 1, post.comments.length
end
def test_attribute_names
assert_equal ["id", "type", "ruby_type", "firm_id", "firm_name", "name", "client_of", "rating", "account_id"],
Company.attribute_names
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册