質問: Rails初心者です。 Ruby on Railsで、数多くのプロジェクトと、そこに所属する複数メンバーについての情報を、いろいろなテーブルに分けてまとめています。具体的には、プロジェクトの情報はprojectsというテーブル、その個々に所属する複数メンバーについての情報は、project26membersというようなテーブル("26"はprojectのid)に保存されています。 あるメンバーの所属する複数のプロジェクトの情報を、繰り返し処理によって引っ張ってきたいのですが、方法がなかなかわかりません。 例えば、そのメンバーが14,28,43という3つのidのプロジェクトに所属している場合、Project"i"Memberというモデルのi(iは何らかのメソッドに基づいてidを引っ張ってくる)を繰り返し処理に用いて、find_byなどのメソッドを使ってデータを引っ張ってくることができると思うのですが、その方法がわかりません。 初心者で恐縮ですが、教えていただけると大変助かります。よろしくお願いいたします。
回答: 具体例がないのでなんとも言えませんが、その設計方法はあまり良くないと思います。 理由は、今後プロジェクトが増えるたびにテーブル数が増えてしまうからです。プロジェクトが1000になったら、1000もテーブルが必要になってしまい、将来的に見たときに様々なコストが見合わなくなると思います。 なので、プロジェクトのテーブルはidごとに割り振らず、projectsテーブルと統一して、usersテーブルとリレーションを組むべきだと思います(1対多のモデルとか)。 例えば、usersのユーザ一人に対して、複数のプロジェクトが対応しているイメージなどが考えられます。 <イメージ> user_id project_id 1 12 1 25 2 12 3 7 ... Railsのリレーショナルなモデルの作り方は、チュートリアルやウェブの記事に沢山あるので、それらを参考にしながら作ると良いと思います。 とりあえず、個人的な経験も踏まえて言いますが、その作り方は厳しいと思います汗