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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

Q&A

解決済

3回答

648閲覧

Rails DBに条件を設定したいです

sn.jr

総合スコア53

Ruby

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/01 12:34

編集2020/03/01 13:46

旅行の持ち物が提案されるサービスを作っており、ユーザーの年齢と性別によって持ち物が変わる仕様にしたいと考えています。

持ち物モデルが出力するデータはユーザーが自分の年齢、性別を選択し、その選択によっては変わるため、その条件をDB内に含ませる必要があると考えています。しかしどのようにその条件をDBに設定すればいいのかが分かりません。どなたかご教授いただけたら幸いです!

前提

ユーザーの特徴モデル(カラム:年齢、性別)
持ち物モデル

ユーザーが21歳、男と登録。すると持ち物がT-シャツ、ジーパン(あまり特徴を考慮した持ち物ではないがご勘弁を)と提案される

検討しているもの

DBの制約の設定と同じように条件を設定できるのではないかと考えている

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

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

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

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

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

guest

回答3

0

自己解決

解決はしていないのですが、変更点などがかなり多くあったためこちらに質問を写させていただきます。
https://teratail.com/questions/244605?modal=q-comp

投稿2020/03/02 07:37

sn.jr

総合スコア53

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

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

0

そもそもDBMSに格納するものなのか疑問ですが
検索条件が年齢か性別ということなので、まずそれらの特徴を考えます。

年齢:

  • 数値なので大小関係がある
  • 条件式として扱わないと100パターンくらいはありうるので重複だらけになる

性別

  • その他性別に配慮しても男・女・他で3パターン
  • 重複させても大して問題にはならなそう

こんな感じなので

カラム名
min_age数値
max_age数値
sexユーザーの性別と同一

始端・終端がない場合(全ユーザー対象など)をどうするかがちょっと悩みどころですが
まぁ、始端-1の終端2147483647でよさそうな気がします。

投稿2020/03/01 22:53

asm

総合スコア15147

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

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

sn.jr

2020/03/02 00:06

ご回答ありがとうございます!お書きしていただいたのはユーザーモデルですか?
guest

0

dbに条件を設定するのではなく
DBから条件を指定して取り出す、というように考えてください
持ち物モデル.where(age: 30, gender: "男")
の様に。

投稿2020/03/01 13:06

winterboum

総合スコア23403

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

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

sn.jr

2020/03/01 13:50

ご回答ありがとうございます。上記に書いてある情報は不十分で申し訳ないのですが、ageとgenderのカラムはユーザーモデルに設定しています。イメージとしてはt.string :passport , if: "User.age >= 20"のような感じです。(こちらは間違っていますが)
winterboum

2020/03/01 20:52

ユーザーにそれらがあるのは当然です。それらはユーザーの属性ですから。 持ち物モデルから条件をつけて選び出すには選ぶための項目・属性が必要です。 年齢と性別で選ぶのでしたらその属性を持ち物モデルにも持たせる必要があります。 ただ、 30歳ピンポイントってことはないでしょうね。 性別に関わらずお薦めもあるでしょうね ですんでどういう条件で取り出すのか、ということが決まらないと持ち物モデルの属性をきめることは出来ません。 回答に書いたのは こんなふうに式を書く という見本です
sn.jr

2020/03/02 00:08

ご返答ありがとうございます。持ち物モデルの属性というのは、持ち物モデルに存在する持ち物1つ1つに存在するものと考えてよろしいですか?持ち物によって項目・属性は変わってくると考えています。あと持ち物モデル.where(age: 30, gender: "男")はどこにお書きになるイメージですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問