質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

840閲覧

グループ機能にユーザー制限

tessyman

総合スコア8

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/07/20 04:03

前提・実現したいこと

グループ機能においてグループの作成、編集の実装を行いました。
しかし、現状どのユーザーでもグループ編集が行えてしまっています。
グループの編集を参加者のみだけが行えるようにしたいです。
(編集ボタンがグループ内のユーザーにのみ表示させたい)

該当のソースコード

/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のカラムを追加などをしたほうが良いのかとも考えました。

アドバイスいただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

if user_signed_in? && current_user == @group.users
のcurrent_user == @group.usersの部分を
@group.users.include?(current_user)
にしてみてください。
DBへの負荷を考えると
@group.group_users.map(&:user_id).include?(current_user.id)
かな、と思いますが美しくない

投稿2020/07/20 04:14

winterboum

総合スコア23347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tessyman

2020/07/20 04:20

winterboum様 適切なアドバイスありがとうございます! 上記の記述で無事条件分岐を行うことができました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問