提交 1841fd54 编写于 作者: J Joshua Peek

Move id attribute methods into their related concern

上级 3e58f8e1
......@@ -11,6 +11,18 @@ def read_attribute_before_type_cast(attr_name)
@attributes[attr_name]
end
# Returns a hash of attributes before typecasting and deserialization.
def attributes_before_type_cast
self.attribute_names.inject({}) do |attrs, name|
attrs[name] = read_attribute_before_type_cast(name)
attrs
end
end
def id_before_type_cast #:nodoc:
read_attribute_before_type_cast(self.class.primary_key)
end
private
# Handle *_before_type_cast for method_missing.
def attribute_before_type_cast(attribute_name)
......
......@@ -77,6 +77,17 @@ def read_attribute(attr_name)
end
end
# A model instance's primary key is always available as model.id
# whether you name it the default 'id' or set it to something else.
def id
attr_name = self.class.primary_key
column = column_for_attribute(attr_name)
self.class.send(:define_read_method, :id, attr_name, column)
# now that the method exists, call it
self.send attr_name.to_sym
end
# Returns true if the attribute is of a text column and marked for serialization.
def unserializable_attribute?(attr_name, column)
column.text? && self.class.serialized_attributes[attr_name]
......
......@@ -26,6 +26,11 @@ def write_attribute(attr_name, value)
end
end
# Sets the primary ID.
def id=(value)
write_attribute(self.class.primary_key, value)
end
private
# Handle *= for method_missing.
def attribute=(attribute_name, value)
......
......@@ -2508,18 +2508,6 @@ def initialize(attributes = nil)
result
end
# A model instance's primary key is always available as model.id
# whether you name it the default 'id' or set it to something else.
def id
attr_name = self.class.primary_key
column = column_for_attribute(attr_name)
self.class.send(:define_read_method, :id, attr_name, column)
# now that the method exists, call it
self.send attr_name.to_sym
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.
......@@ -2565,19 +2553,10 @@ def cache_key
end
end
def id_before_type_cast #:nodoc:
read_attribute_before_type_cast(self.class.primary_key)
end
def quoted_id #:nodoc:
quote_value(id, column_for_attribute(self.class.primary_key))
end
# Sets the primary ID.
def id=(value)
write_attribute(self.class.primary_key, value)
end
# Returns true if this object hasn't been saved yet -- that is, a record for the object doesn't exist yet; otherwise, returns false.
def new_record?
@new_record || false
......@@ -2822,14 +2801,6 @@ def attributes
end
end
# Returns a hash of attributes before typecasting and deserialization.
def attributes_before_type_cast
self.attribute_names.inject({}) do |attrs, name|
attrs[name] = read_attribute_before_type_cast(name)
attrs
end
end
# Returns an <tt>#inspect</tt>-like string for the value of the
# attribute +attr_name+. String attributes are elided after 50
# characters, and Date and Time attributes are returned in the
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册