LoginSignup
29
27

More than 5 years have passed since last update.

Railsで既存DBを流用したときのDangerousAttributeErrorを解消

Last updated at Posted at 2013-12-20

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で解決することができます。

29
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
27