railsで既存DBからアプリケーションを作るときは、database.ymlにつなげたいDBの接続情報を記述した上で、
rake db:schema:dump
して、スキーマを作成します。
ここのテーブルに対しては、
rails g model hoge
でhogeモデルのクラスを作成すれば、名前がhogeのテーブルのモデルクラスを作ることができます。
しかし、例えばテーブル中にhashというカラムがあると、
ActiveRecord::DangerousAttributeError: hash is defined by Active Record
というエラーが出てしまいます。
Active Record中のhashメソッドと名前がかぶってしまっているからです。
そんなときに使うのが safe_attributes というgemです。
Gemfileに以下を記述しbundle installしてあげると、
gem 'safe_attributes'
内部処理での名前かぶりを自動的に解決してくれます。
全てのテーブルで必要としている訳でなく、特定のテーブルのみ適応させたいと言う場合は、
gem 'safe_attributes', :require => 'safe_attributes/base'
のように記述し、modelクラスに問題となるカラムを記述します。
class MyModel < ActiveRecord::Base
bad_attribute_names :my_attr
validates_presence_of :my_attr
end
既存DBがactiverecord関係なしに設計されている時は、activerecordの変数やメソッドに関しては当然考慮されていないので、こういった事態に陥ることがあります。
そんなときお手軽にこのgemで解決することができます。