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

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

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

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

Q&A

解決済

2回答

1155閲覧

【Rails】プルダウンのリレーションが知りたい

Hinoarashi.

総合スコア76

Ruby on Rails

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

0グッド

1クリップ

投稿2022/04/09 05:03

UserテーブルとSexテーブルがあるとします。
UserはSexのカラムである「男性」「女性」から1つを選択します。

イメージ説明

Userテーブルにはsex_idがあり、Sexテーブルにはnameカラムに「男性」「女性」の2レコードがあります。
これは1:多ですか?

また、上記以外の方法で上記のプルダウンを実現する方法はありますか?
上長からプルダウンは1:1だと言われたのですが、納得いかないので質問させてもらいました。

ご回答お願いします。

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

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

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

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

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

no1knows

2022/04/09 13:36

ここに書くのは適切じゃないと思うのですが・・・ > 上記以外の方法で上記のプルダウンを実現する方法はありますか? 選択肢が少なくて1つしか選ばないのなら、個人的にラジオボタンのほうがユーザーさんにとって優しい実装かと思います。 (毎回プルダウン→クリックだとユーザーさんは手間なので)
guest

回答2

0

ベストアンサー

イメージ説明
ユーザーとSexの関係のテーブルを普通に作ろうとするとこうなると思うのですが、これは多対1の関係です。
1対1にはなりません。

投稿2022/04/09 08:34

編集2022/04/09 08:46
koitarou

総合スコア21

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

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

m.ts10806

2022/04/09 08:38

あのですから、個人宛ではなく「質問者にわかるように」 でないと回答にしてもらった意味がないです。
koitarou

2022/04/09 08:51 編集

質問者は既に理解をしていて、m.ts10806さんの考えが僕も質問者も分かってないので、m.ts10806さんに質問してます。
koitarou

2022/04/09 08:47

他の方もわかる様に修正しました。
m.ts10806

2022/04/09 09:16 編集

>質問者は既に理解をしていて、 でしたら、私の回答がベストアンサーなのは違和感があるので かえてもらうように本人に伝えておいてください。 こちらは混乱させる意図はなくあくまで「1対1と表現した理由」に言及しているのみですので。 (なので、「明らかに」とした表現も修正しました)
guest

0

納得できないなら納得できるまでその上長に聞くのが筋と思いますが、
データ同士の対応は1対1です。
今回だと1Userが複数Sexを選択できるわけではなく1つのみという仕様なので1対1。
複数選択/設定できるなら1対多と考えられます。

おそらくその上長は上記のような意図があったのではと推察されます。
※ただやはりどういう意図で言ったのかは本人しか分からないので、必ず確認を
この手の議論はきっちり詰めた方が良いです。
言葉の定義は現場やプロジェクトで変わってきたりするので、
確定しておかないと話が通じなくなってしまいます(指示者や現場側の配慮も必要ですが)

確実に1対多の身近な例だとteratailの質問でしょう。

質問 対 質問タグ
質問 対 質問への追記修正依頼
質問 対 回答
質問の回答 対 質問の回答へのコメント

など。
(あとクリップとか高評価/低評価とか通報とかも1対多になると思います)

上記以外の方法で上記のプルダウンを実現する方法はありますか?

そもそも現状どのように実装されているかコードなど含めた前提がないので「上記以外」がどういう想定をされているのか分からないですが、「あるかないか」だと「ある」です。
ゴールは1つかもしれませんが、それに向かう道は1つではないので「幾らでも考えられる」という形でしょうか。
まずは「上記」を省かず提示されるところからかなと。

履歴書から性別が削除された時代で「性別を選択する」というのも本当に必要かどうか考えないといけないですが、
そんな増えるものでもないのでテーブルに持たなくても定数とかで持っても良いと思いますし、考え方次第で幾らでもあるかと。
どのように使いたいかとかUserテーブルにどう保持してるかとか、それら要件踏まえる必要があるのでこのくらいで止めておきます。

投稿2022/04/09 05:09

編集2022/04/09 07:48
m.ts10806

総合スコア80850

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

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

m.ts10806

2022/04/09 05:32 編集

本件Rubyに特化した話でないと思うので、「データ同士がどういう関連性か」のみで考えた方が良いと思います。 1つ目はCountry の中に沢山のCityがあるということで1対多で合っています。 2つ目は記事に「1つの都道府県はたくさんの商品に紐付いています」と明記されています。 余談ですが「○○市の市長」なら(各国や自治体の法に基づくので絶対とは言えないが)1対1です。
Hinoarashi.

2022/04/09 05:29

なるほど、データ同士がどういう関係かをまず考えればよいということですね。 納得しました。 ありがとうございます。
m.ts10806

2022/04/09 05:30

>どういう関係か 結局は仕様なので「どういう関係にしたいか」「どのように扱うのか」を決めて、適切に対応する 形になると思います。 ※もし設計書などがあるのなら設計者に意図を聞かないといけません
koitarou

2022/04/09 06:00

いや、これは一対多ですよ。1がSex側ね。 m.tsさんの書かれてる、1ユーザーが複数Sexを選択できる状態は多対多です。 m.tsさんの言い方を借りるなら、 Sexの中に複数ユーザーがいるので一対多です。
m.ts10806

2022/04/09 06:06

>UserはSexのカラムである「男性」「女性」から1つを選択します。 この前提なので一対一になると思います。
koitarou

2022/04/09 06:11

ならないですよ。1つの性別に対して複数ユーザーが紐づいてるんですから。
m.ts10806

2022/04/09 06:15

そのように解釈された理由が分かりません。 要件が「UserはSexから1つ選択」なので、主体はSexではないです。
koitarou

2022/04/09 06:19

主体とか関係なくて、テーブルのリレーションの問題なので、主体がどうとか考えるとズレますよ。
m.ts10806

2022/04/09 06:24

どちらが主かって結構大事なのでは? SQLならテーブル定義、本件Ruby on Railsなのでモデル定義にどう書くかに影響します。
koitarou

2022/04/09 06:30 編集

例えば CountryとCityの関係性1対多なのであれば、主体をCityにしても多対1になるだけで、1対1にはなりませんよね? では主体っていってるものが何をもって主体と言ってるのですか?
m.ts10806

2022/04/09 06:39 編集

ん-。このままコメント欄だけでやりとりするのは難しいように思います。 もう少し具体的な根拠や図など含めて自身で回答にされたほうが良いと思います。 私の主張としては「ユーザーは性別を1つしか選べない(保持しない)」という点で1対1だと判断しました。複数持てるなら1対多ですけど。
m.ts10806

2022/04/09 06:37

※個人的にはこの質問者さんに指示をしている上長さんの意見を聞きたいですが。
koitarou

2022/04/09 06:56 編集

m.tsさんはユーザーを1ユーザーレコードとしてとらえてますよ。 テーブルの関係で言えば1対1にはならないです。 具体的な図とか根拠って、そんな難しい話してます?
m.ts10806

2022/04/09 06:57

いえ、回答の方向性が違うのであればコメントでなんとかするより別回答としておこしたほうが有益であると判断したためです。
m.ts10806

2022/04/09 07:05 編集

「私にわかるように」ではなく、「質問者側の人にわかるように」説明されたほうが良いので、やはりある程度具体的な情報や根拠は必要に思います。 特に本質問者は上長の発言に納得行かずに質問に至ってるので(本意は上長に聞くべきであるものの)、ある程度の情報はあったほうが上長に話しやすいのと思うので。(赤の他人がそこまでやるべきかどうかはご判断に任せますが、別回答にするメリットはあると思います)
koitarou

2022/04/09 07:16

m.tsさんは、まだ1対1だと思われてますか? ではあれば後ほど図を描きますよ。 二人の意見がバラけてると見る人がどっち信じればいいか分からなくなるので。
m.ts10806

2022/04/09 07:42

koitarouさん 繰り返しますが「私にわかるように」ではなく、「質問者側の人にわかるように」お願いします。 こちらも少し回答は調整します(観点の問題) あと、ユーザ名は可能な限りフルでお願いします。特別思い入れがあるとかではなく、 今はいないようですが、全く別人になりますので。 no1knowsさん 分かりやすい記事をありがとうございます。 設計時に頭を悩ますところでもありますね。
m.ts10806

2022/04/09 07:49

Hinoarashi.さん 解決後ですがニュアンスを調整しました。 私の観点は「上司はなぜ1対1と言ったかを推測してみた」方向に修正しています。
koitarou

2022/04/09 08:03

m.ts10806さん、まず上司気にしなくていいです。 上司が間違ってます。なぜなら僕が上司だからです。 ここの主に質問されて、1対1と答えた後に間違えに気づいて本人に訂正しましたが、ここの回答を見てこんがらがっていたので僕が直接回答したまでなので。
m.ts10806

2022/04/09 08:07

koitarouさん その前提がないのでこっちはもっと混乱しています。 (あったとしても「社内の人員のことなので社内で片づけてね」としか思わないですが)
koitarou

2022/04/09 08:10

いや、どんな前提だとしても、テーブルのリレーションの正解が変わることはないので、そこは伏せたかったのですが、あまりにも上司を気にされてたので。
m.ts10806

2022/04/09 08:12

>あまりにも上司を気にされてたので。 ここは既に書いてるように「納得いかないからと他人に聞いても発言者の意図は分からない」 という前提のもと、「意図は本人に聞いてね」と説いているだけです。 質問見て思ったのは「何で本人に聞かないだろう」ですし、今でもそう思ってます。
koitarou

2022/04/09 08:31

ま、そこは本筋から脱線するので、話戻しましょう。 新しい回答に画像付きで質問書いておきますね。
koitarou

2022/04/09 09:01

あとはまあ、[質問 対 質問タグ]も1対多ではなく多対多なんだけどなぁ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問