1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #15502 from sgrif/sg-use-null-column

Use null column for association key types
This commit is contained in:
Yves Senn 2014-06-04 22:02:25 +02:00
commit e2e308bbe7
2 changed files with 23 additions and 23 deletions

View file

@ -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)

View file

@ -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.