
こんにちは、mahです。
このブログでは、僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、ノウハウなどを書いていきます。
今回は、DBに紐つかない属性(カラム)をモデルに追加する についてです。
「DBに保存しないでいいけど、属性持たせて処理に使いたい!」
ということがよくあります。
現場でもよくやるので覚えておいて損はないです。
【Rails】DBに紐つかない属性(カラム)をモデルに追加する
やり方
Railsの標準機能である attribute API を使います。
参考リンク
rails/activerecord/lib/active_record/attributes.rb at 5-1-stable · rails/rails · GitHub
Rails: ActiveRecord標準のattributes APIドキュメント(翻訳)|TechRacho by BPS株式会社
サンプルコード
以下は、Articleモデルに、virtual_tags という名前で、Array型 の属性を追加する例です。
class Article < ApplicationRecord # Array型の属性を追加 DB保存は不可 attribute :virtual_tags, type: Array end
こうすることで、virtual_tagsという属性 に 配列の値 を保持させることが出来るようになります。
もし、typeを指定しない場合は、設定した値の型で値が設定されます。
下記に、
数値型(Integer)
文字列型(String)
ハッシュ(Hash)
の値を設定する例を載せておきます。
# model
class Article < ApplicationRecord
# hogeという属性を付与
attribute :hoge
end
[4] pry(#<ArticlesController>)> a = Article.new
=> #<Article:0x00007f9d80c41650
# 初期値はnil
[5] pry(#<ArticlesController>)> a.hoge
=> nil
[6] pry(#<ArticlesController>)> a.hoge = 123
=> 123
# 数値
[7] pry(#<ArticlesController>)> a.hoge.class
=> Integer
[8] pry(#<ArticlesController>)> a.hoge = "String型です"
=> "String型です"
# 文字列
[9] pry(#<ArticlesController>)> a.hoge.class
=> String
[10] pry(#<ArticlesController>)> a.hoge = { hash: 'hash' }
=> {:hash=>"hash"}
[12] pry(#<ArticlesController>)> a.hoge
=> {:hash=>"hash"}
# ハッシュ
[13] pry(#<ArticlesController>)> a.hoge.class
=> Hash
以上が、attribute APIの使い方 です。
使いこなせるようになるとかなり便利なので、ぜひ取り入れてみてください。
RailsやRubyを学びたい人へ
RailsやRubyを学びたい人は、
RailsHack(レイルズハック)という、
最近できた新しいプログラミングスクール(今なら通常価格69,800円が、早期割で29,800円!)か、
Udemy
で下記のコースを受講すると良いです★
✅1. フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座
✅2. 【はむ式】ハンズオンで学ぶRuby on Rails 6【Dockerにも触れられる】
<- おすすめ。ハムさんはReactやTypeScriptの教材も非常に丁寧。
✅3. はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう
また、
Udemy
は定期的にセールをやっていますし(90%OFFとかもザラ)、
「30日間なら返金できる」ので、
満足できなかった時でも安心です。

【公式】RailsHack(レイルズハック)
【公式】Udemyで学んでみる
![]()