Ruby on Rails - ActiveRecord で規約外のテーブル名を使用する方法!

Updated:


※この記事は12年以上前に投稿されたもので、情報が古い可能性があります。

Ruby on Rails の ActiveRecord でテーブルを扱う際、デフォルトでは「モデルでは単数系の名称」を「テーブルでは複数形の名称」を使用するようになっています。 “hoge” → “hoges”、”library” → “libraries”、”person” → “people” などとテーブル側は適切な複数形で扱うようになっています。

自動で複数形の名前で扱ってくれるのはよいのですが、自作のモデルで複数形を勝手に規約に当てはめて欲しくない場合があります。

たとえば、モデル側 “abc_vwx”、テーブル側 “abc_vwxs” を扱いたい場合です。 この場合、これではエラーとなります。 テーブル名が不正なのです。 モデルが “abc_vwx” ならテーブルは “abc_vwxes” でないといけないからです。 これは、”box” の複数形が “boxes” になるのと同じ変換です。 自作の「英単語」にもこの規約が当てはめられてしまいます。

しかし、このモデルに対して例外的な設定をしてやれば、規約に縛られない自由なテーブル名を使うことができます。

以下、その対処方法です。

対処方法Permalink

0. 前提条件Permalink

Rails のバージョンは 3.2.3、ActiveRecord のバージョンも 3.2.3 です。 以前のバージョンでは対処が若干異なりますの注意!

1. 対処方法Permalink

モデルが “abc_vwx” で、テーブルを “abc_vwxs” と “e” を除外した形で扱いたい場合についての対処方法です。 “RAILS_ROOT/app/models/abc_vwx.rb” に以下のように1行記述を追加するだけです。

class AbcVwx < ActiveRecord::Base
  self.table_name = 'abc_vwxs'  # ← 追加
end

このようにすれば、モデルに対して自由なテーブル名が使用可能となります。


もちろん、Rails アプリ全般でテーブル名を単数形で扱う設定もあります。 今回はあくまでも特定のテーブルのみに対する設定方法でした。

以上です。





 

Sponsored Link

 

Comments