今日の流れ
- モデリング
- Viewとbefore_action作成
今日はRailsチュートリアルに沿ってRelationshipモデルを作成しました。内容的に目新しいことはないですけど、データモデルの大事な部分なので丁寧に行いました。
1. モデリング
UsersがGroupに所属していることをTwitterのフォローシステムを用いることで表現することにしたので、例のごとくrails g model
コマンドでRelationshipモデルを作成しました。
基本的にはRailsチュートリアルと同様にactive_relationshipsとpassive_relationshipを作成しました。しかしRailsチュートリアルではUser同士がフォローし合っていたのですが、僕の場合はUserがGroupをフォローするので多少異なり、以下のようにフォロー機能を実装しました。
app/models/
# group.rb
has_many :passive_relationships, class_name: "Relationship",
foreign_key: "group_id",
dependent: :destroy
has_many :followers, through: :passive_relationships, source: :user
# user.rb
has_many :active_relationships, class_name: "Relationship",
foreign_key: "user_id",
dependent: :destroy
has_many :following, through: :active_relationships, source: :group
2. Viewとbefore_action作成
Groupのnew, show, create, edit, update, destroyのViewを作成しました。ただGroupのedit, update, destroyはcurrent_userがそのGroupをフォローしている必要があるため、before_actionでフォローしているかどうか確かめるようにしました。
# グループに所属しているかどうか確認、所属していたらtrue
def belong_to_group
group = Group.find(params[:id])
unless current_user.following?(group)
flash[:danger] = "フォローしていないグループにはアクセスできません"
redirect_to root_url
end
end
おわりに
いよいよあと少しで完成です。早く完成させて働き始めたいです。