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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails 5

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

1回答

815閲覧

if-else文によるボタンの切り替えについて

tomohiro2525

総合スコア12

Ruby on Rails 5

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2020/04/21 04:22

編集2020/04/21 04:37

件名にあるように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)

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

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

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

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

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

maisumakun

2020/04/21 04:27

「うまく表示がされません。」とありますが、具体的にどうなりますか?
tomohiro2525

2020/04/21 04:33

ok_requestカラムの値が1でも0でも【許可の取り消し】ボタンが表示されている状態です。
guest

回答1

0

ベストアンサー

ruby

1 def permit_share?(house) #申請してるかの確認 2 Share.where(house_id: self.id) 3 end

これの返り値はデータベースの検索結果を表すリレーションオブジェクトなので、nilにもfalseにもなりません。

Share.where(house_id: self.id).count > 0のように、存在するかどうかのチェックを入れる必要があります。

投稿2020/04/21 04:38

maisumakun

総合スコア145208

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問