Railsでカラム名「hash」を含むデータベースを扱う

そもそも

Railsではカラム名「hash」を含むデータベースにアクセスしようとするとエラーになる。

hash is defined by ActiveRecord

つまりActiveRecord様がもう予約語として確保してしまったから無理!テメーがカラム名変えろよってエラー

対処1

さすがRails、すでにそれ専用のGemがある

github.com

インストールは safe_attributes を加えるだけ、使うときは

class MyModel < ActiveRecord::Base
  bad_attribute_names :hash
end

ってやるだけ。簡単じゃん

対処2

だが上記のGemには1つ欠点がある。全くメンテナンスされてない(平成28年10月24日現在4年以上更新されていない)

要はinstance_method_already_implemented見てるだけだからそこハックすればよくね?って話

  # hashが予約語なので回避 
  def self.instance_method_already_implemented?(method_name)
    return true if method_name == 'hash'
    super
  end

いやカラム名変えろって話ですよね、はい