生徒ユーザーの各ページで,コメントを投稿,表示できるようにする.
投稿モデルの作成
投稿のコメントを表すモデルとして,Userモデルに紐づくPostモデルを作成する.dependent属性を付け,ユーザーが削除されたときはそれに紐付いているコメントは全て削除されるようにする.
【手順】
bin/rails g model post user_id:integer body:text
bin/rails db:migrate
vi app/models/user.rb
(以下を追記)
class User < ApplicationRecord
has_many :posts, dependent: :delete_all
# …
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
def email_required?
false
end
end
vi app/models/post.rb
(以下を追記)
class Post < ApplicationRecord
belongs_to :user
end
投稿の表示
投稿されたコメントを表示できるようにする.
【手順】
vi app/controllers/users_controller.rb
(以下を追記)
class UsersController < ApplicationController
before_action :authenticate_user!
def show
@user = User.find(params[:id])
@students = User.where(role: 'student') if @user.role == 'teacher'
@posts = Post.where(user_id: @user.id).order('created_at desc')
end
end
vi app/views/users/show.html.erb
(以下を最後に追記)
<% if @posts != nil %>
<% l = @posts.length; @posts.each_with_index {|post, i| %>
<p><%= (l-i).to_s + " : " + post.created_at.to_s %><br />
<%= post.body %></p>
<% } %>
<% end %>
投稿のテスト
コンソールを用いて,ユーザー(user001)が投稿したという体裁の,テストデータ(ダミーデータ)を挿入する.
【手順】
bin/rails c
irb(main):001:0> u = User.find_by(id: 2)
irb(main):002:0> u.posts.create({ body: "Hello, world!" })
irb(main):003:0> u.posts.create({ body: "こんにちは世界!" })
irb(main):004:0> quit
サーバを起動して異なるユーザーのマイページにアクセスし,投稿済みユーザー(user001)と未投稿ユーザー(user002)でマイページが異なることを確認する(先生ユーザーでログインして,リンクを辿ればよい).
0 件のコメント:
コメントを投稿