閲覧ありがとうございます!
初めてアプリケーションを作ってみようと挑戦している者です。
よろしくお願いいたします!
前提
rails5
ruby 2.4.1
例)
ハッピーセット1/coke:1個 /sprite:2個/ orange: 3個/ water: 4個
ハッピーセット2/coke:5個 /sprite:5個/ orange: 5個/ water: 5個
ハッピーセット3/coke:0個 /sprite:0個/ orange: 0個/ water: 0個/ milk: 12個
- ドリンクのみで構成されている、ハッピーセットが数種類ある。
- ドリンクの個数によって、ハッピーセットの名称が異なる。
- ドリンク種類は固定ではない。
という内容です。
問題点&やったこと
上手く、オブジェクトからドリンクの個数が取り出したい。
初めは、coke等のドリンク名をカラムに持つハッピーセットテーブルを作成しました。
ruby
1create_table "happysets", force: :cascade do |t| 2 t.string "name" 3 t.integer "coke" 4 t.integer "sprite" 5 .......etc 6 end 7
が、これだとドリンクの種類が増える度にカラム名を追加しなければならず、構造的には正しくないと本に書いてあったため、ドリンクテーブルを作成、ハッピーセットテーブルとアソシエーションしました。
ruby
1create_table "drinks", force: :cascade do |t| 2 t.string "name" 3 ...etc 4 end 5 6create_table "happyset_drinks", force: :cascade do |t| 7 t.integer "happyset_id" 8 t.integer "drink_id" 9 ...etc 10 end 11
疑問1: 中間テーブルには外部キーのみしか入れないのですか?
has_many, has_many throughによってハッピーセットとドリンクテーブルを上手く連携させることが出来たのですが、個数をどう扱えばいいのか分からなかったので、一旦中間テーブルに入れてみました
ruby
1create_table "happyset_drinks", force: :cascade do |t| 2 t.integer "happyset_id" 3 t.integer "drink_id" 4 t.integer "quantity" 5 ...etc 6 end 7 8class HappysetDrink < ApplicationRecord 9 belongs_to :happyset 10 belongs_to :drink 11end 12 13class Drink < ApplicationRecord 14 has_many :happyset_drinks 15 has_many :happysets, through: :happyset_drinks 16end 17 18class Happyset < ApplicationRecord 19 has_many :happyset_drinks 20 has_many :drinks, through: :happyset_drinks 21end
Happyset.find(1).happyset_drinks.find_by(drink_id:1).quantityで個数を取得することが出来るのですが、どうも直感的な書き方では無いことに違和感を感じ質問させていただきました。
また自分なりに調べた所、中間テーブルには外部キーのみしか書かれていない物が多かったので、自分の考え間違っているのでは?と思いました。
よろしくお願いいたします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/05 12:25