スリ飯屋MaLankaのフリーエンジニアな日々

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

【Rails】DBに紐つかない属性(カラム)をモデルに追加する

【Rails】DBに紐つかない属性(カラム)をモデルに追加する

こんにちは、mahです。

このブログでは、僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、ノウハウなどを書いていきます。

今回は、DBに紐つかない属性(カラム)をモデルに追加する についてです。

「DBに保存しないでいいけど、属性持たせて処理に使いたい!」

ということがよくあります。

現場でもよくやるので覚えておいて損はないです。

【Rails】DBに紐つかない属性(カラム)をモデルに追加する




やり方

Railsの標準機能である attribute API を使います。

参考リンク

rails/attributes.rb at 5-1-stable · rails/rails · GitHub

Rails5: 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日間なら返金できる」ので、

満足できなかった時でも安心です。


f:id:mah666hhh:20201129193352p:plain


【公式】RailsHack(レイルズハック)

【公式】Udemyで学んでみる