モデル同士を関連付ける
それではようやく、ログイン状態で投稿したデータをユーザと紐付けます。モデル同士を関連付けるためには、Post
モデルがuser_id
というカラムを持ち、その中に投稿者のidが入っている必要があります。
migrationファイルを作成したらお馴染みの bundle exec rake db:migrate
です。これでpostsテーブルにuser_id
カラムが追加されます。
DBの準備が済んだら、モデルに手を入れていきましょう。ActiveRecordの機能を使えばモデル同士の関連をシンプルに記述することが出来ます。UserモデルとPostモデルに次のコードを追加します。
上記の記述により、あるユーザの投稿一覧がUser#posts
で取得でき、ある投稿の投稿者がPost#user
で参照できるようになります。
PostsController#post_params
で、ログイン中のユーザidをパラメータに追加します。
これで、投稿にユーザ情報を紐付けることができました。さらに投稿一覧にも発言者のアイコンを表示しましょう。app/views/posts/index.html.erb
を次のように変更します。
発言者のアイコンと名前を表示し、自分の発言のみ削除できるようにします。user_idのついていない今までのデータは一旦消してから、試してみましょう。
最終的に、次のような画面が出来上がりました。少しはTwitterっぽくなってきたでしょうか。
機能追加のヒント
Rails入門の連載は今回で一旦終わりです。Railsに初めて触れる人に、なんとなくRails開発の雰囲気を掴んで頂けると嬉しいです。
応用編として、このTwitterもどきに「フォロー」や「お気に入り」、「RT(リツイート)」機能を付けてみると面白そうな気がします。今後の連載でも題材として使用するかもしれません。