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

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

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

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

Q&A

解決済

2回答

5716閲覧

Rails4 商品カテゴリの実装について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2014/11/24 06:51

フリマアプリのメルカリのようなカテゴリを実装したいです。
作り方を教えてください

カテゴリは親カテゴリと子カテゴリで構成されるものとし、親と子どちらにも属するものとします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下のページでは、 商品が 1 カテゴリーに属する例が示されています。

以下のページでは、2段のカテゴリーの設定例がしめされています。(ポリモーフィックについては無視してよいです)

上のページの例も踏まえて次のような3つの案を考えました。

案 1:
Item に category0_id, cateory1_id の2つの項目を持たせる。
category0_id が親カテゴリーの id, category1_id が 子カテゴリーの id を示すようにする。

案 2:
(item, カテゴリー、サブカテゴリー) の組を保持するテーブルを作る。
ItemCategory
item_id // item の id
category0_id // 親カテゴリーの id
category1_id // サブカテゴリーの id
のようにする。

案 3:
Item は複数のカテゴリーに属することにする。
カテゴリーは、親カテゴリー、子カテゴリー、アイテムへの参照を保持するようにする。

Item と Category の次の関係を設定する。
Item
has_many :categories # 所属するカテゴリーを保持する
Category
has_many :items # アイテムを保持する。
has_many :categories # サブカテゴリーを保持する
belongs_to: category # 親カテゴリーを保持する

案2 が nakita の検討案に近いものだと思います。
案3 だと、3段、4段 といった不定長さのカテゴリー構成に対応できます。

基礎知識として Rails のチュートリアルでよくとりあげられている
ブログサイトでの 記事とカテゴリ、記事とコメント といったような 1対多、多対多のデータを扱う例
を学習・理解すると良いと思います。

投稿2014/11/24 14:33

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2014/11/25 11:41

回答いただきありがとう御座います。 案2と案3の違いがわかりません
katoy

2014/11/25 13:29

案2と案3の違いについて述べます。 案3 では   本 -> 日本 -> 児童文学 -> 小学生 のカテゴリーに "鹿の王"という書籍がある ということを表現できます。  item     所属するカテゴリー ----------------------------------------  鹿の王 ->  {本、日本、児童文学, 小学生} カテゴリー 親     子 ----------------------------------- 本    -> なし   {日本} 日本   -> 本    {児童文学} 児童文学 -> 日本   {小学生} 小学生  -> 児童文学 {} 案2 では次のような 2 段階カテゴリーしか表現できません。   児童文学 -> 小学生 のカテゴリーに "鹿の王"という書籍がある id item  親    子 ----------------------------- 1   鹿の王 児童文学 小学生 ------------------------------- でも、item 要素が空の行を加えて、次のようにすることで   本 -> 日本 -> 児童文学 -> 小学生 のカテゴリーに "鹿の王"という書籍がある を表現することも可能ですが。 id item  親    子 ----------------------------- 1  鹿の王 児童文学 小学生 2  null 日本   児童文学 3  null 本    日本 ------------------------------- (本来のこのテーブルで表したい (item, 親カテゴリー、子カテゴリー) の情報だけでなく、カテゴリーのネスト関係の情報の保持にも使ってしまうのは物事を複雑にしてしまいます)
退会済みユーザー

退会済みユーザー

2014/11/26 06:16

非常に分かりやすく説明して頂きありがとう御座います。 案3であれば無限階層ができますね ------------------------------------------------------------------------ has_many :categories # サブカテゴリーを保持する belongs_to: category # 親カテゴリーを保持する ------------------------------------------------------------------------ のコードを見たときに動きがイマイチイメージできなかったですが 今回の説明で理解することができました。
guest

0

... カテゴリは親カテゴリと子カテゴリで構成されるものとし、親と子どちらにも属するもの...

カテゴリーの構造がイメージできるような具体例を示していただけると、回答がつきやすくなると思います。

現状の質問文の内容では、nakita さんがどこまで DB 構造について検討済みなのか? rails の version は? activerecord の asociation についてどの程度慣れ親しんでいるのか? ... など いろいろ背景が不明で、回答をしにくいです。

投稿2014/11/24 10:27

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2014/11/24 13:18

DBは下記の構造で検討しています。Rails ver は4.1.6です。 itemテーブル       商品情報 カテゴリテーブル     カテゴリ情報(メンズ、家電など) アイテムカテゴリテーブル 上記2つの中間テーブル (例)親カテゴリ:メンズ    子カテゴリ:トップス 上記の親子の関係を実装する場合、中間テーブルにカテゴリidを2つ持てるように カラムを用意すれば良いでしょうか? プログラミング歴半年程度で慣れ親しんでいるとは程遠いです。 設計も初めてです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問