Translations of this page?:

Reserved Words You Can’t Use

  • 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
  • PGError
  • PGconn
  • PGlarge
  • PGresult
  • PLATFORM
  • PStore
  • ParseDate
  • Precision
  • Proc
  • Process
  • Queue
  • RAKEVERSION
  • RELEASE_DATE
  • RUBY
  • RUBY_PLATFORM
  • RUBY_RELEASE_DATE
  • RUBY_VERSION
  • 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

Other Names Reported to Have Caused Trouble

  • action
  • attributes – if you have a has_many called attributes, you can’t access to your object attributes anymore; only the associated objects
  • application
  • @base_path – setting this variable name in a controller method seems to break the ablity to render a partial in the view. The view will render with no content and no errors will be generated .
  • connection – there seems to be a connection class already
  • dispatcher
  • display
  • format
  • key
  • load – When making an Ajax call to an action named load, the action’s code will be skipped (or otherwise rendered useless). This is made apparent by: a) @variables are not available in the view, b) calling render :layout ⇒ false still yields the layout.
  • new, override to news if you want a news table
  • notify – not a valid column name
  • open – not a valid column name
  • quote ‘quote’ cannot be used as a column name
  • request
  • records – a table named records seemed to cause duplicate entries to be found by find
  • responses – scaffold borks with “undefined method ‘body=’ ”
  • send
  • session (session_controller or SessionController will not work)
  • system – a table column named system causes problems when trying to generate scaffold
  • template – a table named templates causes an error when you try to invoke the create method of the default controller
  • test (however those work with ruby test/unit/axis_test.rb and rake test_units)
  • timeout – an ActiveRecord attribute named timeout will clash with the global function “timeout” defined in Ruby’s timeout.rb
  • to_s—naming a model instance method to_s resulted in ‘File not found’ for any view an object of this class (should have) appeared in (no matter which method called) and WebRick had to be restarted. I couldn’t drag the very cause into light, but in the traces ‘to_s’ gave me a hint. After renaming everything worked well again.
  • type—or any of the other MagicFieldNames
  • URI

singular names finishing in “s”: Axis → Axes, Access → Accesses, will break the pluralization in rake: Axi, Acces Names You Can’t Use from SQL

The list of reserved words is dependent on the database you use, for portability reasons it would be wise to not chose a field name listed in any of these tables:

  • SQL-92, SQL-99 and SQL-2003 Reserved Words
  • PostgreSQL Key Words
  • MySQL Reserved Words
  • SQL Server, ODBC, and SQL Server Future Keywords

If you aren’t sure, you can check the word against the SQL Reserved Words Checker

Also note that numerous field names have special properties. See the full list of MagicFieldNames. Typical Errors

The errors that occur when you use a reserved word tend to be very confusing. Things that you think are happening in your code, are actually happening somewhere in the framework. Sometimes you can look at the stack trace and see that its not going through your class, but through some framework class. If you have an error that makes no sense at all, I would check to make sure you don’t have a name that conflicts with the above list.

In one instance I got a mysql error when I tried to save a model that belongs_to :quote. The belongs_to made a method that overrode the quote method in activerecord::base, which caused Quote objects to be returned where activerecord was expecting a quoted string! Requests

 
rails/pages/reservedwords.txt · Last modified: 2009/03/25 19:55 by coderpath
 
Recent changes RSS feed Creative Commons License