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
|
end
|
||||||
|
|
||||||
def association_key_type
|
def association_key_type
|
||||||
column = @klass.column_types[association_key_name.to_s]
|
@klass.column_for_attribute(association_key_name).type
|
||||||
column && column.type
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def owner_key_type
|
def owner_key_type
|
||||||
column = @model.column_types[owner_key_name.to_s]
|
@model.column_for_attribute(owner_key_name).type
|
||||||
column && column.type
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_slices(slices)
|
def load_slices(slices)
|
||||||
|
|
|
@ -18,6 +18,8 @@ module ActiveRecord
|
||||||
include TimeZoneConversion
|
include TimeZoneConversion
|
||||||
include Dirty
|
include Dirty
|
||||||
include Serialization
|
include Serialization
|
||||||
|
|
||||||
|
delegate :column_for_attribute, to: :class
|
||||||
end
|
end
|
||||||
|
|
||||||
AttrNames = Module.new {
|
AttrNames = Module.new {
|
||||||
|
@ -192,6 +194,25 @@ module ActiveRecord
|
||||||
[]
|
[]
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
||||||
# If we haven't generated any methods yet, generate them, then
|
# 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?)
|
!value.nil? && !(value.respond_to?(:empty?) && value.empty?)
|
||||||
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
|
|
||||||
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,
|
# 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
|
# "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.
|
# <tt>ActiveModel::MissingAttributeError</tt> if the identified attribute is missing.
|
||||||
|
|
Loading…
Reference in a new issue