件名にあるようにif-elseによる条件分岐で【申請を許可する】ボタン・【許可の取り消し】ボタンの動作を作成途中です。データベースへの入力と削除は動作するのですが、ボタンの切り替えがうまく表示がされません。
データベース(sharesテーブル)の1つのIDに対してok_request(フラグ)カラムに1が入力されていれば【許可の取り消し】ボタンを表示、0と入力されていれば【申請を許可する】ボタンを表示するためには、どのように記述したらよろしいのでしょうか?
●ユーザークラス
class User < ApplicationRecord validates :name, presence: true, length: { maximum: 50 } validates :email, presence: true, length: { maximum: 255 }, format: {with: /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i }, uniqueness: { case_sensitive: false } has_secure_password has_many :houses #募集との紐付け has_many :shares #許可テーブルとの紐付け #has_many :ok_requestings, through: :shares, source: :house #許可している募集の取得 def permit_share?(house) #申請してるかの確認 Share.where(ok_request: "1") end end
●ボタンの切り替えのコード
<% if current_user.permit_share?(house) %> <%= form_with( url: unpermit_share_path, local: true, method: :delete) do |f| %> <%= hidden_field_tag :user_id, user.id %> <%= hidden_field_tag :house_id, house.id %> <%= f.submit '許可の取り消し', class: 'btn btn-danger btn-block' %> <% end %> <% else %> <%= form_with( url: permit_share_path, local: true) do |f| %> <%= hidden_field_tag :user_id, user.id %> <%= hidden_field_tag :house_id, house.id %> <%= f.submit '申請を許可する', class: 'btn btn-primary btn-block' %> <% end %> <% end %>
●ボタンのビュー
class SharesController < ApplicationController before_action :require_user_logged_in def permit_share share = Share.where(user_id: params[:user_id]) .where(house_id: params[:house_id]) if share share.update(ok_request: true) flash[:success] = '申請を許可しました。' end redirect_to house_path(params[:house_id]) end def unpermit_share share = Share.where(user_id: params[:user_id]) .where(house_id: params[:house_id]) if share share.update(ok_request: false) flash[:success] = '許可を取り消しました。' end redirect_to house_path(params[:house_id]) end end
●データベース、sharesテーブル
mysql> select * from shares; +----+---------+----------+------------+---------------------+---------------------+ | id | user_id | house_id | ok_request | created_at | updated_at | +----+---------+----------+------------+---------------------+---------------------+ | 4 | 2 | 2 | 1 | 2020-04-08 13:44:19 | 2020-04-12 10:57:22 | | 7 | 1 | 4 | 0 | 2020-04-09 12:50:42 | 2020-04-20 03:59:59 | | 9 | 3 | 4 | 1 | 2020-04-10 12:48:52 | 2020-04-20 02:49:29 | | 10 | 3 | 1 | 0 | 2020-04-15 08:56:55 | 2020-04-15 08:56:55 | | 11 | 1 | 3 | 1 | 2020-04-16 14:48:19 | 2020-04-17 14:11:23 | | 12 | 2 | 5 | 0 | 2020-04-16 14:52:48 | 2020-04-20 02:35:36 | +----+---------+----------+------------+---------------------+---------------------+ 6 rows in set (0.00 sec)
回答1件
あなたの回答
tips
プレビュー