I’ve been thinking about Rails reserved words lately, and I’ve come up
with a solution that works in theory. Before I share my solution, let
me help you understand where my frustration comes from.
A while back, I was making a template system, and unsurprisingly, I
had a ActiveRecord class named Template, and a controller named
TemplatesController. Rails is using an instance variable named
@template, and I’ve stomped all over it by creating my own. The same
thing happened when I had a resource called Url.
My solution for instance variables simple. In Views, Rails will set an
instance variable with a not so common name. I’m leaning towards
__variable_name__ or even __rails_instance_hash[:key]__. This way,
there isn’t any confusion when it comes to instance variable names.
Another space where there are conflicts are in ActiveRecord models.
You can’t have a text field called errors.
Rails assumes the errors method of your ActiveRecord object to be an
instance of ActiveRecord::Errors.
In my opinion, this doesn’t make the most sense. I believe we could
apply the double underscores here as well. Instead of #errors, it
would be #__errors__. You should be able to have any attribute name as
long as it is legal for the underlying database. Rails should not be
polluting your model namespace.
One problem with these changes is Rails has been like this for a few
years now. Old code would break, so these types of changes would have
to be introduced in a major release. The benefit of these changes
could be huge. Lessening the chance that your code will tramp over
Rails internals could be a great thing.