命名規約を上書きする
Railsアプリケーションで
別の命名規約を使わなければならない場合
や、レガシーデータベースを用いてRailsアプリケーションを作成しないといけない場合
は、デフォルトの命名規約を手軽にオーバーライドできます。
テーブル名を変更
ApplicationRecordは、有用なメソッドが多数定義されているActiveRecord::Baseを継承しているので、使うべきテーブル名を
ActiveRecord::Base.table_name=メソッドで明示的に指定
できます。
class Book < ApplicationRecord
self.table_name = "my_books"
end
irb(main):001:0> Book.table_name
=> "my_books"
class Book < ApplicationRecord
end
*********@******** % rails c --sandbox
....
irb(main):001:0> Book.table_name
=> "books"
テスト用のテーブル、カラム名も上書きできる
テーブル名をこのように上書き指定する場合は、テストの定義でset_fixture_classメソッドを使い、フィクスチャ(my_books.yml)に対応するクラス名を別途定義しておく必要があります。
# test/models/book_test.rb
class BookTest < ActiveSupport::TestCase
set_fixture_class my_books: Book
fixtures :my_books
# ...
end
ActiveRecord::Base.primary_key=メソッドを用いて、テーブルの主キーに使われるカラム名を上書きすることもできます。
class Book < ApplicationRecord
self.primary_key = "book_id"
end
感想
テーブルの名前を変えられることは知らなかった。
レガシーデータベースとはなんだろうか?