質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

975閲覧

rails active_hashを使用することのメリット

ryuuzu

総合スコア30

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/03/27 00:37

プログラミングスクールの課題でrailsを使用したメルカリのようなフリマアプリを作成しています。

商品出品のフォームを作成するときにセレクトボックスで都道府県を選択するものを以下のhamlで作成しました。

%select{name: "prefecture"} %option{value: "初期"}選択してください %option{value: "北海道"} 北海道 %option{value: "青森"} 青森県 %option{value: "岩手"} 岩手県      ~~~省略~~~ %option{value: "鹿児島"} 鹿児島県 %option{value: "沖縄"} 沖縄県 %option{value: "未定"} 未定

するとメンターより「active_hashを使った方がいい」と伺ったのでactive_hashについて調べたのですが、メリットがいまいちよくわからなくて困っています。

active_hashについてネットで検索してみましたが、ざっくりした流れで言うと

gem'active_hash'を入れる ↓ addressモデルをrails g modelで作る。 ↓ prefectureモデルを自作する。 ↓ prefecture.rbを class Prefecture < ActiveHash::Base self.data = [ {id: 1, name: '北海道'}, {id: 2, name: '青森県'}, {id: 3, name: '岩手県'}, {id: 4, name: '宮城県'},    ~~~省略~~~ {id: 44, name: '大分県'}, {id: 45, name: '宮崎県'}, {id: 46, name: '鹿児島県'}, {id: 47, name: '沖縄県'} ] end と設定する。 ↓ addressモデルとprefectureモデルをアソシエーションで関連付ける。 @address.prefecture.nameで名前が取れるようになる。

といった感じになりますよね?
正直手間としては最初のhamlでずらっと書く方が楽なような・・・
active_hashを使うべきデータの定義はどこかのページをコピペしたのがどのサイトも

•これから扱うデータがDBにデータとして保存しておくほど重要ではない、かつ、基本的に変更されない。

•ActiveRecordと同じ感覚でデータを操作したい。

と書いてあり、これもよく意味が分かりません(特に前者)。

active_hashを使用することのメリットはいったい何なのでしょうか?また、逆に使わないとどのような手間・エラーが発生する可能性があるのでしょうか?

無知でお恥ずかしいのですが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

正直手間としては最初のhamlでずらっと書く方が楽なような・・・

「都道府県リストは未来永劫その1箇所でしか使わない」というのならそれで構わないかもしれませんが、都道府県リストはそこ1箇所だけではなく、あちこちで使いうるものなので、まとめて管理したほうが合理的です。

もし万が一都道府県リストが書き換わることになったら、直書きしていた場合は1箇所残らず書き換えないといけない(このような手間を残すことを「技術的負債」といいます)のに対して、リストを作っていた場合はリストだけ書き換えれば済むようになります。


とはいえ、共通化の道具立てとしてactive_hashが適当かどうかは、また別問題となります。適当な名前空間に配列定数を置くだけのような形でも構わないかもしれません。

自分なら、都道府県リストもデータベースにテーブルを立てるかと思います。

投稿2020/03/27 00:49

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuuzu

2020/03/27 01:28

他ページで何回も使いまわす可能性があるデータリストはactive_hashなどでリスト化しておくと後で変更になっても対処が楽という事ですね!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問