前提・実現したいこと
グループ機能においてグループの作成、編集の実装を行いました。
しかし、現状どのユーザーでもグループ編集が行えてしまっています。
グループの編集を参加者のみだけが行えるようにしたいです。
(編集ボタンがグループ内のユーザーにのみ表示させたい)
該当のソースコード
/groups_controller.rb
ruby
1class GroupsController < ApplicationController 2 before_action :set_group, only: [:show, :edit, :update, :destroy] 3 4 def index 5 @groups = Group.all 6 end 7 8 def new 9 @group = Group.new 10 @group.users << current_user 11 end 12 13 def create 14 @group = Group.new(group_params) 15 if @group.save 16 redirect_to groups_path, notice: 'Success Create Group' 17 else 18 render :new 19 end 20 end 21 22 def edit 23 end 24 25 def update 26 if @group.update(group_params) 27 redirect_to groups_path, notice: 'Updated Group' 28 else 29 render :edit 30 end 31 end 32 33 def destroy 34 end 35 36 def show 37 end 38 39 private 40 def group_params 41 params.require(:group).permit(:name, user_ids: []) 42 end 43 44 def set_group 45 @group = Group.find(params[:id]) 46 end 47 48end 49
モデル(グループ、ユーザー、中間)
ruby
1class User < ApplicationRecord 2 has_many :group_users 3 has_many :groups, through: :group_users 4end
ruby
1class Group < ApplicationRecord 2 has_many :group_users 3 has_many :users, through: :group_users 4 validates :name, presence: true, uniqueness: true 5end
ruby
1class GroupUser < ApplicationRecord 2 belongs_to :group 3 belongs_to :user 4end
マイグレーションファイル(グループ、ユーザー、中間)
ruby
1class CreateGroups < ActiveRecord::Migration[5.2] 2 def change 3 create_table :groups do |t| 4 t.string :name, null: false 5 t.index :name, unique: true 6 t.timestamps 7 end 8 end 9end
ruby
1class DeviseCreateUsers < ActiveRecord::Migration[5.2] 2 def change 3 create_table :users do |t| 4 ## Database authenticatable 5 t.string :nickname, null: false 6 t.string :email, null: false, default: "" 7 t.string :encrypted_password, null: false, default: "" 8#-----以下省略----- 9end
ruby
1class CreateGroupUsers < ActiveRecord::Migration[5.2] 2 def change 3 create_table :group_users do |t| 4 t.references :group, foreign_key: true 5 t.references :user, foreign_key: true 6 t.timestamps 7 end 8 end 9end
グループメンバー一覧表示のビュー
show.html.haml
こちらのif文のところに条件を入れて編集ボタンの条件分岐を行いたいです。
ruby
1- if user_signed_in? && current_user == @group.users 2 .groupMenu--edit 3 = link_to "Edit group", edit_group_path(@group.id), class:"groupMenu--edit--text" 4 .groupMember 5 %h3 Member 6 - @group.users.each do |user| 7 .content 8 .content__left 9 - if user.image? 10 = image_tag "#{user.image}", class:"small-icon" 11 - else 12 = icon("far", "laugh", class: "small-default-icon") 13 .content__right 14 .content__right__user 15 = link_to "@#{user.nickname}", user_path(user), class: "groupUserName" 16 .content__right__prof 17
試したこと
if文の条件の書き方をいろいろ変えてみたのですが、idをうまく引っ張れなかったです。
そもそもgroupテーブルにuser.idのカラムを追加などをしたほうが良いのかとも考えました。
アドバイスいただければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 04:20