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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

1691閲覧

Rails5 中間テーブルの作り方 カテゴリーの実装方法

yu_yu

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/05/08 16:36

編集2020/05/08 16:39

就職活動専用のスケジュール管理アプリを作りたいと考えています。

企業情報を入力したうえでカテゴリーから追加したい予定を複数選択し
カテゴリーにそれぞれ締め切りの日程を登録できるようにしたいと考えています
一覧で見た際は下記のように表示したいと考えています。
IDとパスワードはログイン機能実装するためではありません。
就活生が企業のホームページにログインする際に必要なため、メモとして残して
おくための情報です。


会社名:      株式会社A
ID:        ユーザーA
PASS:       パスワードA
エントリーシート: 5月20日15時まで
面接:       5月25日14時から

会社名:    株式会社B
ID:      ユーザーB
PASS:     パスワードB
説明会:    5月10日11時から
ウェブテスト: 5月15日12時
面接:     5月25日15時から

新規作成ページでは「nested_form」 を使いカテゴリーと日程を複数登録できることはわかりました。
しかしDBをどのように作成していけばいいのか分かりません。
中間テーブルを用いて作成するべきでしょうか。
色々調べてみたのですがぴったりな物が見つからず悩んでいます。
DBの作成ができれば、そこからは自力で調べていくのでDBの正しい作り方を教えていただきたいです。
自分なりにイメージしてみたのですが正しいでしょうか。

Userテーブル
・会社名、ID、PASS

Categoryテーブル
・カテゴリー(エントリーシート、面接、テストなど)

User_Categoryテーブル
・user_id、category_id、締切日

Rails ver は5.0.7.2です。
プログラミング自体は1か月ほど前から勉強し始めたため知らないことばかりです。
演習としてCRUD処理を用いたメモアプリは作成したことあります。
1つずつ調べながらでも完成させたいため分かる方いましたら教えていただきたいです。
情報足らずな所が多いと思いますがよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

関係性には 1:1、1:多、多対多の3種あり、多対多の場合は中間テーブルが必要です。
ですので質問をそのまま答えると「中間テーブルを用いて作成するべきです」
ただ、
もしかしてその カテゴリ って単に分類では無いですか?
もしそうでしたら
企業と予定 を 1:多 で作り、カテゴリは予定の中に単なる選択肢として記録するのがよいと思います。
選択肢は
プログラム中に 定数 として定義していてもよいし、
tableで管理して、そこから Category.all で取り込んでもよいし。

例えばカテゴリ相当が  性別 とか 都道府県 とかでしたら 多:多などにはしないですよね。

投稿2020/05/08 23:26

winterboum

総合スコア23567

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

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

yu_yu

2020/05/09 05:32 編集

回答ありがとうございます! 「企業と予定を 1:多 で作り、カテゴリは予定の中に単なる選択肢として記録する」のようにする場合 下記のようなイメージで合っているでしょうか? 企業:親 予定:子 カテゴリー:親 予定:子
winterboum

2020/05/09 08:39

企業:親 予定:子 で、予定の中に例えば start_datetime, end_datetime, title なとど並んで category とか category_id とか category_code とかでカテゴリーを現る感じです
yu_yu

2020/05/09 12:49

記載するのを忘れてしまったのですが、その場合カテゴリーをセレクトボックスにするのは可能でしょうか? 何度も質問してしまって申し訳ございません。
winterboum

2020/05/09 13:30

できますよ。次の3つがその関連helperです select(method, choices = nil, options = {}, html_options = {}, &block) Wraps ActionView::Helpers::FormOptionsHelper#select for form builders: <%= form_for @post do |f| %> <%= f.select :person_id, Person.all.collect { |p| [ p.name, p.id ] }, include_blank: true %> <%= f.submit %> <% end %> --- options_for_select(container, selected = nil)Link Accepts a container (hash, array, enumerable, your type) and returns a string of option tags. Given a container where the elements respond to first and last (such as a two-element array), the “lasts” serve as option values and the “firsts” as option text. Hashes are turned into this form automatically, so the keys become “firsts” and values become lasts. If selected is specified, the matching “last” or element will get the selected option-tag. selected may also be an array of values to be selected when using a multiple select. options_for_select([["Dollar", "$"], ["Kroner", "DKK"]]) # => <option value="$">Dollar</option> # => <option value="DKK">Kroner</option> options_for_select([ "VISA", "MasterCard" ], "MasterCard") # => <option value="VISA">VISA</option> # => <option selected="selected" value="MasterCard">MasterCard</option> --- options_from_collection_for_select(collection, value_method, text_method, selected = nil) Returns a string of option tags that have been compiled by iterating over the collection and assigning the result of a call to the value_method as the option value and the text_method as the option text. options_from_collection_for_select(@people, 'id', 'name') # => <option value="#{person.id}">#{person.name}</option> This is more often than not used inside a select_tag like this example: select_tag 'person', options_from_collection_for_select(@people, 'id', 'name') I
yu_yu

2020/05/10 08:58

わざわざヘルパーをピックしていただきありがとうございます! 1つずつ使い方を調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問