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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1553閲覧

会員の投稿にコメントができるようにする際の関連付けについてアドバイスください(^^;)

NaojirouHisada

総合スコア60

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2015/11/30 09:27

現在Facebookのようなものを作成しようとチャレンジしているのですが、
会員は複数の投稿を持つことができ、
投稿は複数のコメントが付けられるという機能を実装中なのですが、
その際に、facebookのようにコメントしたユーザーのページに行けるようにしたいのですが、
その際の関連付けをどのように記述すればよいのかわからないのですが、
アドバイスもらえないでしょうか?
https://gyazo.com/735ed14dd8fbf57b6588396771dc5f61
構造はこのような感じです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ここまで構造化されているなら、何も考える必要がないと思いますが・・・

Ruby

1# ユーザー 2class User 3 has_many :microposts 4 has_many :comments 5end 6 7# 投稿記事 8class Micropost 9 belongs_to :user 10 has_many :comments 11end 12 13# コメント 14class Comment 15 belongs_to :micropost 16 belongs_to :user 17end

構造のコメントのところにある、user_idに何のユーザーを格納するのかがよくわかりません。
多分、これが混乱の元なのではないでしょうか?
それとも、投稿記事にコメントがぶら下がるのではなく、投稿者にコメントが直接ぶら下がるのでしょうか?
だとしたら、こんな感じになるでしょう。

Ruby

1# ユーザー 2class User 3 has_many :microposts 4 has_many :post_comments, classname: Comment, source: author_id # 表で示されているuser_id 5 has_many :posted_comments, classname: Comment, source: target_user_id # 表で示されているuser_id(コメントしたユーザーのID) 6end 7 8# 投稿記事 9class Micropost 10 belongs_to :user 11end 12 13# コメント 14class Comment 15 belongs_to :author, classname: User, foreign_key: author_id # 表で示されているuser_id 16 belongs_to :target_user, classname: User, foreign_key: target_user_id # 表で示されているuser_id(コメントしたユーザーのID) 17end

投稿2015/12/02 02:27

rifuch

総合スコア1901

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

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

NaojirouHisada

2015/12/02 12:54

お忙しい中、 アドバイスありがとうございます。 micropost_idの左に記載したuser_idは、誰が投稿した記事なのかを特定するために、使用するもので、 micropost_idと合わせて誰が投稿した記事なのかを特定させようとしてみました。 そして micropost_idの右側のuser_idは、 投稿した記事に誰がコメントをしたのかを特定させるために設定したのですが、 どのように格納させるのか、 コメントには外部キーが3つ設定せれているので、 どのように関連付ければよいのかで混乱してしまいました(^^;) ER図の段階でどちらに持たせるべきかを深く考えなかったために、混乱してしまいました(^^;) このようなER図を設計しました。 https://gyazo.com/d55d77231d7fde545c10dcadca2145d2 記事のコメントは誰がコメントしたのかわかるようにし、 後に、 そのコメントしたユーザーに対して返信できるようにしたいのです。 Facebookのタイムライン、コメント、返信のような感じにしたかったのです(^^;) コードとアドバイス大変感謝しています。 これを参考に上手くできるようがんばってみます! 本当にありがとうございます。!!
rifuch

2015/12/02 12:59

なるほど、であれば、上記の方法ですね。 記事投稿ユーザーは、投稿記事経由で一意になりますし、コメントしたユーザーは、コメントからの参照で取得出来ますから。 透過的に取得して一意に出来るIDは、無理に外部参照する必要が無いので、そのあたり、うまい事重複しないように設計する必要がありますよね。
NaojirouHisada

2015/12/05 07:51

返信が遅くなりまして大変申し訳ございません(^^;) お忙しい中ありがとうございます。 なるほど。 アドバイスありがとうございます。!! 早速取り掛かってみます(^^)!! 本当にありがとうございました(^^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問