BETA

Railsの単一テーブル継承(STI)

投稿日:2020-01-18
最終更新:2020-01-18

一つのテーブルだけで、サブクラスのデータも管理できる。
RailsではSTIを使えるようになっている。

使うにはまず、スーパークラスにtypeカラムを持たせる。

$ rails g model Product name:string type:string  

こんなマイグレーションファイルが作られる。

class CreateProducts< ActiveRecord::Migration  
  def change  
    create_table :products do |t|  
      t.string :name  
      t.string :type  

      t.timestamps  
    end  
  end  
end  

あとは継承するだけ。

# app/models/book.rb  
class Book < Product  
end  


# app/models/computer.rb  
class Computer < Product  
end  

オブジェクトを作成すると、typeカラムにクラス名が入る。

$ rails c  
irb(main):001:0> Book.new  
=> #<Book id: nil, name: nil, type: "Book", created_at: nil, updated_at: nil>  
irb(main):002:0> Computer.new  
=> #<Computer id: nil, name: nil, type: "Computer", created_at: nil, updated_at: nil>  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

BЯunoの技術ブログ。日々学んだことを記録していくよ。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう