- A
- C
- D
- H
- I
COLUMN_NAME_ORDER_WHITELIST | = | / \A (?:\w+\.)? \w+ (?:\s+asc|\s+desc)? (?:\s+nulls\s+(?:first|last))? \z /ix |
Regexp whitelist. Matches the following:
|
||
COLUMN_NAME_WHITELIST | = | /\A(?:\w+\.)?\w+\z/i |
Regexp whitelist. Matches the following:
|
Returns true
if attribute
is an attribute method and table exists, false
otherwise.
class Person < ActiveRecord::Base
end
Person.attribute_method?('name') # => true
Person.attribute_method?(:age=) # => true
Person.attribute_method?(:nothing) # => false
Returns an array of column names as strings if it's not an abstract class and table exists. Otherwise it returns an empty array.
class Person < ActiveRecord::Base
end
Person.attribute_names
# => ["id", "created_at", "updated_at", "name", "age"]
Returns the column object for the named attribute. Returns a ActiveRecord::ConnectionAdapters::NullColumn
if the named attribute does not exist.
class Person < ActiveRecord::Base
end
person = Person.new
person.column_for_attribute(:name) # the result depends on the ConnectionAdapter
# => #<ActiveRecord::ConnectionAdapters::Column:0x007ff4ab083980 @name="name", @sql_type="varchar(255)", @null=true, ...>
person.column_for_attribute(:nothing)
# => #<ActiveRecord::ConnectionAdapters::NullColumn:0xXXX @name=nil, @sql_type=nil, @cast_type=#<Type::Value>, ...>
A class method is 'dangerous' if it is already (re)defined by Active Record, but not by any ancestors. (So 'puts' is not dangerous but 'new' is.)
Returns true if the given attribute exists, otherwise false.
class Person < ActiveRecord::Base
end
Person.has_attribute?('name') # => true
Person.has_attribute?(:age) # => true
Person.has_attribute?(:nothing) # => false
Raises an ActiveRecord::DangerousAttributeError
exception when an Active Record method is defined in the model, otherwise false
.
class Person < ActiveRecord::Base
def save
'already defined by Active Record'
end
end
Person.instance_method_already_implemented?(:save)
# => ActiveRecord::DangerousAttributeError: save is defined by Active Record. Check to make sure that you don't have an attribute or method with the same name.
Person.instance_method_already_implemented?(:name)
# => false
# File activerecord/lib/active_record/attribute_methods.rb, line 89 def instance_method_already_implemented?(method_name) if dangerous_attribute_method?(method_name) raise DangerousAttributeError, "#{method_name} is defined by Active Record. Check to make sure that you don't have an attribute or method with the same name." end if superclass == Base super else # If ThisClass < ... < SomeSuperClass < ... < Base and SomeSuperClass # defines its own attribute method, then we don't want to overwrite that. defined = method_defined_within?(method_name, superclass, Base) && ! superclass.instance_method(method_name).owner.is_a?(GeneratedAttributeMethods) defined || super end end