Teacherロールでログインしたときに,新着アップロードが分かるように修正する.
アップデート順に並べるように変更
生徒の並びをアップデート順番に並べるように変更する.
【手順】
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')
.order('updated_at desc') if @user.role == 'teacher'
@posts = Post.where(user_id: @user.id).order('created_at dssc')
end
end
メッセージがポストされたときの処理を変更
Teacherロール以外でメッセージがポストされたときにUserのエントリをアップデートするようにする.すなわち,新たに生徒・学生がメッセージをポストしたときは,エントリがアップデートされるため,Teacherロールでログインしたときに先頭に表示されるようになる.
なお,Teacherロールでログインして書き込んだときには,Userエントリは更新されないため,並び順は不変となることに注意されたい.
【手順】
vi app/controllers/posts_controller.rb
(以下を追加)
def create
p = post_params
user = User.find(p[:id])
if (p[:body] == "")
flash[:alert] = 'Null comment is not permitted.'
else
if user.posts.create(body: p[:body], submitter: current_user.id)
user.touch if current_user.role != 'teacher'
flash[:notice] = 'Post was successfully created.'
else
flash[:alert] = 'Something went wrong'
end
end
redirect_to user_path(user.id)
end
Visitモデルの作成
各ページへの参照状況を表すモデルとしてUserモデルに紐づくVisitモデルを作成する.dependent属性を付け,ユーザーが削除されたときはそれに紐付いているVisitのエントリは全て削除されるようにする.
【手順】
bin/rails g model visit user_id:integer visitee:integer
bin/rails db:migrate
vi app/models/user.rb
g(以下を追記)
class User < ApplicationRecord
has_many :posts, dependent: :delete_all
has_many :visits, dependent: :delete_all
…(略)…
end
vi app/models/visit.rb
(以下を追記)
class Visit < ApplicationRecord
belongs_to :user
endTeacher
ページ参照の作成と更新
各ページを参照した記録を残すようにする.current_user.visits.find_by(...) という書き方 current_user.visits << Visit.create(...) という書き方に注意.
vi app/controllers/users_controller.rb
(以下を追記)
def show
@user = User.find(params[:id])
@students = User.where(role: 'student')
.order('updated_at desc')
@posts = Post.where(user_id: @user.id)
.order('created_at desc')
visit = current_user.visits.find_by(visitee: @user.id)
if (visit != nil)
visit.touch
else
current_user.visits << Visit.create(visitee: @user.id)
end
end
0 件のコメント:
コメントを投稿