ご回答いただけると嬉しいです!お願いします!!
###前提・実現したい
「参加」ボタンを押せば、他ユーザーが作成したグループに参加できるように実装したいです。
自分が作成したグループには「参加」ボタンを表示しないようにするための実装は済んでいます。
###該当のソースコード
views
1#groups/index.html.erb 2 3<h1>グループ一覧</h1> 4<div class="group_list"> 5 <% @groups.each do |group| %> 6 <div class="group_index"> 7 <% unless GroupUser.exists?(group_id: group.id, user_id: current_user.id) %> 8 <div class="participation"> 9 <a href="#">参 加</a> ###このボタンをクリックすることで参加できるように実装したい 10 </div> 11 <% else %> 12 <div class="participation"> 13 <a href="#">参加中</a> 14 </div> 15 <% end %> 16 <div class="group__name" > 17 <%= group.name %> 18 </div> 19 <div class="group_content"> 20 <%= group.content %> 21 </div> 22 </div> 23 <% end %> 24</div>
routes
1Rails.application.routes.draw do 2 devise_for :users 3 root to: "tweets#index" 4 resources :groups, only: [:index, :new, :create] 5end
controller
1#groups_controller.rb 2class GroupsController < ApplicationController 3 4 def index 5 @groups = Group.order("name ASC") 6 end 7 8 def new 9 @group = Group.new 10 @group.users << current_user 11 end 12 13 def create 14 @group = current_user.groups.new(group_params) 15 if current_user.save 16 redirect_to root_path 17 else 18 render :new 19 end 20 end 21 22 private 23 24 def group_params 25 params.require(:group).permit(:name, :content, user_ids: []) 26 end 27 28end
- 必要かわからないですが念のために・・・
model
1#user 2class User < ApplicationRecord 3 devise :database_authenticatable, :registerable, 4 :recoverable, :rememberable, :validatable 5 validates :nickname, presence: true 6 has_many :group_users 7 has_many :groups, through: :group_users 8end 9 10#group 11class Group < ApplicationRecord 12 has_many :group_users 13 has_many :users, through: :group_users 14 validates :name, presence: true 15end 16 17#group_user 18class GroupUser < ApplicationRecord 19 belongs_to :group 20 belongs_to :user 21end
migration
1#groupsテーブル 2class CreateGroups < ActiveRecord::Migration[6.0] 3 def change 4 create_table :groups do |t| 5 t.string :name, null: false, unique: true 6 t.string :content 7 t.timestamps 8 end 9 end 10end 11 12#group_usersテーブル 13class CreateGroupUsers < ActiveRecord::Migration[6.0] 14 def change 15 create_table :group_users do |t| 16 t.references :group, foreign_key: true 17 t.references :user, foreign_key: true 18 t.timestamps 19 end 20 end 21end
###発生している問題・エラーメッセージ
以下のコードを記述したら、他のユーザーが既存のグループに参加できるようになったが、グループの作成者が退出した形になった。
また、no template for interactive request?というエラーが出た。
routes
1resources :groups, only: [:index, :new, :create] do 2 member do 3 get :join 4 end 5end
controller
1#groups 2(省略) 3def join 4 @group = Group.find(params[:id]) 5 @group.users << current_user 6 @group.save 7end 8(省略)
view
1#groups/index.html.erb 2<%= link_to '参加', join_group_path(group) %>
##バージョン
rails 6.0.0
mysql
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。