余計なテーブルを減らしてactive-hashで管理する。

使い方とかはネットに出てるので、個人的に理解のために足りなかった情報とかまとめておく。

インストールとかは置いといて

一応実装のポイントとして、ネットとかにもあるように、大事な方(実際にテーブルがある方)のモデルは普通にrails g modelで作って、

extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :ハッシュ持ちたいモデル。自分の場合はconditionだった。

の2行を追加しておいて

DBにテーブル作らない方のモデルは

class Condition < ActiveHash::Base
self.data = [
{id: 1, name: '新品、未使用'}, {id: 2, name: '未使用に近い'}, {id: 3, name: '目立った傷や汚れなし'},
]
end

とか自作で作る。ポイントは継承してるのがActiveHash::Base

であるところ。

で、フォームの方の書き方は

= f.collection_select :condition_id, Condition.all, :id, :name, {:include_blank => true}

こんな感じ。

 

 

とりあえずネットの情報通り作った感じ。

参考記事

https://qiita.com/Toman1223/items/8633142312bfa886d50b

 

個人的に初めて使う時はフォームどうすんねん?どうやって保存されるねん?が疑問だったので、

collection_select使えばいいってことと

参考記事(collection_selectの使い方)

https://crieit.net/posts/Rails-collection-select

普通にitemsテーブル(itemsなのは自分がそうだっただけ)に、外部キーでも何でもなく整数のcondition_idを登録すればOKってことくらい補足しておけばそんなに複雑な物でもなかったので割と使い始め易い部類のgemだと思う。

 

あと値の引っ張り方は普通に

@item.condition.name

とかでOK(てか普通でいいからこのgem使ってるんだろうけど)