mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Use null column for association key types
This commit is contained in:
parent
0329d59a65
commit
e8375a662b
2 changed files with 23 additions and 23 deletions
|
@ -104,13 +104,11 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def association_key_type
|
||||
column = @klass.column_types[association_key_name.to_s]
|
||||
column && column.type
|
||||
@klass.column_for_attribute(association_key_name).type
|
||||
end
|
||||
|
||||
def owner_key_type
|
||||
column = @model.column_types[owner_key_name.to_s]
|
||||
column && column.type
|
||||
@model.column_for_attribute(owner_key_name).type
|
||||
end
|
||||
|
||||
def load_slices(slices)
|
||||
|
|
|
@ -18,6 +18,8 @@ module ActiveRecord
|
|||
include TimeZoneConversion
|
||||
include Dirty
|
||||
include Serialization
|
||||
|
||||
delegate :column_for_attribute, to: :class
|
||||
end
|
||||
|
||||
AttrNames = Module.new {
|
||||
|
@ -192,6 +194,25 @@ module ActiveRecord
|
|||
[]
|
||||
end
|
||||
end
|
||||
|
||||
# Returns the column object for the named attribute. Returns +nil+ if the
|
||||
# named attribute not exists.
|
||||
#
|
||||
# class Person < ActiveRecord::Base
|
||||
# end
|
||||
#
|
||||
# person = Person.new
|
||||
# person.column_for_attribute(:name) # the result depends on the ConnectionAdapter
|
||||
# # => #<ActiveRecord::ConnectionAdapters::SQLite3Column:0x007ff4ab083980 @name="name", @sql_type="varchar(255)", @null=true, ...>
|
||||
#
|
||||
# person.column_for_attribute(:nothing)
|
||||
# # => #<ActiveRecord::ConnectionAdapters::Column:0xXXX @name=nil, @sql_type=nil, @cast_type=#<Type::Value>, ...>
|
||||
def column_for_attribute(name)
|
||||
name = name.to_s
|
||||
columns_hash.fetch(name) do
|
||||
ConnectionAdapters::Column.new(name, nil, Type::Value.new)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# If we haven't generated any methods yet, generate them, then
|
||||
|
@ -339,25 +360,6 @@ module ActiveRecord
|
|||
!value.nil? && !(value.respond_to?(:empty?) && value.empty?)
|
||||
end
|
||||
|
||||
# Returns the column object for the named attribute. Returns +nil+ if the
|
||||
# named attribute not exists.
|
||||
#
|
||||
# class Person < ActiveRecord::Base
|
||||
# end
|
||||
#
|
||||
# person = Person.new
|
||||
# person.column_for_attribute(:name) # the result depends on the ConnectionAdapter
|
||||
# # => #<ActiveRecord::ConnectionAdapters::SQLite3Column:0x007ff4ab083980 @name="name", @sql_type="varchar(255)", @null=true, ...>
|
||||
#
|
||||
# person.column_for_attribute(:nothing)
|
||||
# # => #<ActiveRecord::ConnectionAdapters::Column:0xXXX @name=nil, @sql_type=nil, @cast_type=#<Type::Value>, ...>
|
||||
def column_for_attribute(name)
|
||||
name = name.to_s
|
||||
self.class.columns_hash.fetch(name) do
|
||||
ConnectionAdapters::Column.new(name, nil, Type::Value.new)
|
||||
end
|
||||
end
|
||||
|
||||
# Returns the value of the attribute identified by <tt>attr_name</tt> after it has been typecast (for example,
|
||||
# "2004-12-12" in a date column is cast to a date object, like Date.new(2004, 12, 12)). It raises
|
||||
# <tt>ActiveModel::MissingAttributeError</tt> if the identified attribute is missing.
|
||||
|
|
Loading…
Reference in a new issue