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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

1535閲覧

Railsのモデルの扱いについて

junya451054

総合スコア69

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/12/29 11:53

ただいま、Railsでwebアプリケーションを作成しているのですが、モデルの構成と、そのより良い取り出し方がわからず困っております。

model1
id
name

model2
id
name

model3
id
name

windows
model1_id, model2_id, model3_id, title, sentence

* model_id, model2_id, model3_idのうちどれか一つにidが入っており、他の2つはNULLが入っています。

といった4つのテーブルがあるのですが、これをif ~~~.present?を使って振り分けようと思います。

Ruby

1if(windows.model1_id.present?) 2 model = Model1.find(windows.model1_id) 3elsif(windows.model2_id.present?) 4 model = Model2.find(windows.model2_id) 5elsif(windows.model3_id.present?) 6 model = Model3.find(windows.model3_id) 7end

この処理をどこかに記述しようと思ったのですが、どこに記述すればいいかで迷っております。
また、このようなモデルの構造で良いのかも迷っております。

より良い方法を知っている方がいらっしゃいましたら、教えていただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ご回答いただきありがとうございます。
たしかに、今後もmodel4, 5が増える可能性がありましたので、ご教授頂いた通りのカラム構成を行った方がいいですね!

とても参考になりました。
ありがとうございます。

投稿2018/01/03 07:38

junya451054

総合スコア69

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

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

0

ベストアンサー

windowsモデルでいいと思います。

使い方は

ruby

1windows = Windows.find(id) 2windows.model 3# => model_* のインスタンス

という感じでしょうか?

余談ですが、
Windowsのスキーマは

model1_id model2_id model3_id title sentence

ではなく

model_name model_id title sentence

のほうがいいと思います。(モデルが今後増えたときとか大変でしょう?)

↑のようにすることで

# model_nameに入っている文字列の定数が存在しなければエラー return エラー処理 unless const_defined?(model_name) klass = const_get(model_name) # model_nameに入っている文字列の定数がクラスでなければエラー return エラー処理 unless klass.is_a?(Class) klass.find(model_id)

のように書くことができます

投稿2017/12/31 05:27

satoshih

総合スコア799

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問