Reserved names with ActiveRecord models
Asked Answered
L

4

66

I take naming pretty seriously, so I think pretty hard about good names for my ActiveRecord models. However, I frequently come up with a name and it has some conflict with a reserved name, either in the database or Ruby or Rails. Model or field names like set or group. Sometimes the issue isn't immediately apparent either. Is there a list somewhere of names we can't use in our model names and a list for field names?

Longhair answered 6/12, 2012 at 18:20 Comment(1)
this site has some of them But I haven't been able to find a comprehensive list. Might be something cool to start a wiki about.Savannasavannah
R
72

Reserved Word List

ADDITIONAL_LOAD_PATHS
ARGF
ARGV
ActionController
ActionView
ActiveRecord
ArgumentError
Array
BasicSocket
Benchmark
Bignum
Binding
CGI
CGIMethods
CROSS_COMPILING
Class
ClassInheritableAttributes
Comparable
ConditionVariable
Config
Continuation
DRb
DRbIdConv
DRbObject
DRbUndumped
Data
Date
DateTime
Delegater
Delegator
Digest
Dir
ENV
EOFError
ERB
Enumerable
Errno
Exception
FALSE
FalseClass
Fcntl
File
FileList
FileTask
FileTest
FileUtils
Fixnum
Float
FloatDomainError
GC
Gem
GetoptLong
Hash
IO
IOError
IPSocket
IPsocket
IndexError
Inflector
Integer
Interrupt
Kernel
LN_SUPPORTED
LoadError
LocalJumpError
Logger
Marshal
MatchData
MatchingData
Math
Method
Module
Mutex
Mysql
MysqlError
MysqlField
MysqlRes
NIL
NameError
NilClass
NoMemoryError
NoMethodError
NoWrite
NotImplementedError
Numeric
OPT_TABLE
Object
ObjectSpace
Observable
Observer
PGError
PGconn
PGlarge
PGresult
PLATFORM
PStore
ParseDate
Precision
Proc
Process
Queue
RAKEVERSION
RELEASE_DATE
RUBY
RUBY_PLATFORM
RUBY_RELEASE_DATE
RUBY_VERSION
Rack
Rake
RakeApp
RakeFileUtils
Range
RangeError
Rational
Regexp
RegexpError
Request
RuntimeError
STDERR
STDIN
STDOUT
ScanError
ScriptError
SecurityError
Signal
SignalException
SimpleDelegater
SimpleDelegator
Singleton
SizedQueue
Socket
SocketError
StandardError
String
StringScanner
Struct
Symbol
SyntaxError
SystemCallError
SystemExit
SystemStackError
TCPServer
TCPSocket
TCPserver
TCPsocket
TOPLEVEL_BINDING
TRUE
Task
Text
Thread
ThreadError
ThreadGroup
Time
Transaction
TrueClass
TypeError
UDPSocket
UDPsocket
UNIXServer
UNIXSocket
UNIXserver
UNIXsocket
UnboundMethod
Url
VERSION
Verbose
YAML
ZeroDivisionError
@base_path
accept
Acces
Axi
action
attributes
application2
callback
category
connection
database
dispatcher
display1
drive
errors
format
host
key
layout
load
link
new
notify
open
public
quote
render
request
records
responses
save
scope
send
session
system
template
test
timeout
to_s
type
URI
visits
Observer

Database Field Names

created_at
created_on
updated_at
updated_on
deleted_at
(paranoia
gem)
lock_version
type
id
#{table_name}_count
position
parent_id
lft
rgt
quote_value

Ruby Reserved Words

alias
and
BEGIN
begin
break
case
class
def
defined?
do
else
elsif
END
end
ensure
false
for
if
module
next
nil
not
or
redo
rescue
retry
return
self
super
then
true
undef
unless
until
when
while
yield
_ FILE _
_ LINE _
Rubenrubens answered 6/12, 2012 at 19:29 Comment(3)
oh man... now it seems like every word is taken! I'm going to have to name my models either with a prefix or postfix; ScottCube or Cube2!Longhair
What is the meaning of "Original Rails Wiki" in this table?Healall
'usage' should be added to the list as wellAmbroid
P
14

Column name type is also reserved and does not show in the list of MyModel.methods!

The single-table inheritance mechanism failed to locate the subclass: 'f'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Project.inheritance_column to use another column for that information.

Does anyone have experience with names like category, class, transaction, group, etc.? All pop into mind when I'm categorising data within my db....

Photooffset answered 24/2, 2016 at 13:55 Comment(1)
Just got burned when I tried to have a column name hash. But it failed in a weird way that led me down many other (incorrect) rabbit holesChristcrossrow
N
12

Here's the list as of Rails 5.1.5:

!
!=
!~
<=>
==
===
=~
[]
[]=
__binding__
__callbacks
__callbacks?
__id__
__send__
_before_commit_callbacks
_before_commit_without_transaction_enrollment_callbacks
_commit_callbacks
_commit_without_transaction_enrollment_callbacks
_create_callbacks
_destroy
_destroy_callbacks
_find_callbacks
_initialize_callbacks
_read_attribute
_reflections
_reflections?
_rollback_callbacks
_rollback_without_transaction_enrollment_callbacks
_run_before_commit_callbacks
_run_before_commit_without_transaction_enrollment_callbacks
_run_commit_callbacks
_run_commit_without_transaction_enrollment_callbacks
_run_create_callbacks
_run_destroy_callbacks
_run_find_callbacks
_run_initialize_callbacks
_run_rollback_callbacks
_run_rollback_without_transaction_enrollment_callbacks
_run_save_callbacks
_run_touch_callbacks
_run_update_callbacks
_run_validate_callbacks
_run_validation_callbacks
_save_callbacks
_touch_callbacks
_update_callbacks
_validate_callbacks
_validation_callbacks
_validators
_validators?
`
accessed_fields
acts_like?
add_to_transaction
aggregate_reflections
aggregate_reflections?
as_json
assign_attributes
association
association_cached?
attribute_aliases
attribute_aliases?
attribute_before_last_save
attribute_change
attribute_change_to_be_saved
attribute_changed?
attribute_changed_in_place?
attribute_for_inspect
attribute_in_database
attribute_method_matchers
attribute_method_matchers?
attribute_missing
attribute_names
attribute_present?
attribute_previously_changed?
attribute_was
attributes
attributes=
attributes_before_type_cast
attributes_changed_by_setter
attributes_in_database
becomes
becomes!
before_committed!
blank?
byebug
cache_key
cache_timestamp_format
cache_timestamp_format?
changed
changed?
changed_attribute_names_to_save
changed_attributes
changed_for_autosave?
changes
changes_applied
changes_internally_applied
changes_to_save
class
class_eval
clear_attribute_changes
clear_changes_information
clone
column_for_attribute
committed!
connection_handler
debugger
decrement
decrement!
deep_dup
default_connection_handler
default_connection_handler?
default_scope_override
default_scopes
default_timezone
define_singleton_method
defined_enums
defined_enums?
delete
destroy
destroy!
destroyed?
destroyed_by_association
destroyed_by_association=
display
dump_schema_after_migration
dump_schemas
dup
duplicable?
encode_with
enum_for
eql?
equal?
error_on_ignored_order
error_on_ignored_order_or_limit
errors
extend
freeze
from_json
frozen?
gem
has_attribute?
has_changes_to_save?
hash
html_safe?
id
id=
id?
id_before_type_cast
id_in_database
id_was
in?
include_root_in_json
include_root_in_json?
increment
increment!
index_nested_attribute_errors
init_with
initialize_internals_callback
inspect
instance_eval
instance_exec
instance_of?
instance_values
instance_variable_defined?
instance_variable_get
instance_variable_names
instance_variable_set
instance_variables
invalid?
is_a?
itself
kind_of?
load_dependency
lock!
lock_optimistically
lock_optimistically?
locking_enabled?
logger
mark_for_destruction
marked_for_destruction?
method
method_missing
methods
model_name
nested_attributes_options
nested_attributes_options?
new_record?
nil?
no_touching?
object_id
partial_writes
partial_writes?
persisted?
pluralize_table_names
pluralize_table_names?
populate_with_current_scope_attributes
presence
presence_in
present?
pretty_inspect
pretty_print
pretty_print_cycle
pretty_print_inspect
pretty_print_instance_variables
previous_changes
primary_key_prefix_type
private_methods
protected_methods
pry
public_method
public_methods
public_send
query_attribute
quoted_id
raw_write_attribute
read_attribute
read_attribute_before_type_cast
read_attribute_for_serialization
read_attribute_for_validation
readonly!
readonly?
record_timestamps
record_timestamps=
record_timestamps?
reload
remote_byebug
remove_instance_variable
require_dependency
require_or_load
respond_to?
respond_to_without_attributes?
restore_attributes
rollback_active_record_state!
rolledback!
run_callbacks
save
save!
saved_change_to_attribute
saved_change_to_attribute?
saved_changes
saved_changes?
schema_format
send
serializable_hash
singleton_class
singleton_method
singleton_methods
skip_time_zone_conversion_for_attributes
skip_time_zone_conversion_for_attributes?
slice
store_full_sti_class
store_full_sti_class?
suppress_warnings
table_name_prefix
table_name_prefix?
table_name_suffix
table_name_suffix?
taint
tainted?
tap
time_zone_aware_attributes
time_zone_aware_types
time_zone_aware_types?
timestamped_migrations
to_enum
to_gid
to_gid_param
to_global_id
to_json
to_key
to_model
to_param
to_partial_path
to_query
to_s
to_sgid
to_sgid_param
to_signed_global_id
to_yaml
toggle
toggle!
touch
touch_later
transaction
trust
try
try!
type_for_attribute
unloadable
untaint
untrust
untrusted?
update
update!
update_attribute
update_attributes
update_attributes!
update_column
update_columns
valid?
validate
validate!
validates_absence_of
validates_acceptance_of
validates_confirmation_of
validates_exclusion_of
validates_format_of
validates_inclusion_of
validates_length_of
validates_numericality_of
validates_presence_of
validates_size_of
validates_with
validation_context
warn_on_records_fetched_greater_than
will_save_change_to_attribute?
with_lock
with_options
with_transaction_returning_status
write_attribute
yield_self

You can get it with

ActiveRecord::Base.instance_methods.sort
Nervine answered 10/4, 2018 at 16:11 Comment(0)
C
4

Open a rails console and a type MyModel.methods

All the methods listed are reserved words.

Calctufa answered 9/3, 2013 at 11:54 Comment(5)
This may lead to false positives. Existing methods and column names will show up leading one to assume they've been using a reserved word all along.Coven
@gg_s That's easy to deal with if you have another model without the questionable columnAndrade
Try ActiveRecord::Base.instance_methodsKeeter
For an alphabetically sorted list, do the following in the Rails console: pp ActiveRecord::Base.instance_methods.sort; nilSpode
This doesn't provide a complete list, mostly just names you shouldn't use for your method names, not your model names.Spode

© 2022 - 2024 — McMap. All rights reserved.