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

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

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

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

Ruby on Rails

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

Q&A

解決済

ボタンが表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

2回答

0グッド

0クリップ

377閲覧

投稿2022/10/08 02:18

編集2022/10/26 10:15

前提

応募ボタンとメッセージボタンを条件分岐で表示させようとしていたのですが、
応募ボタンが出現しません。
ifでtrueならメッセージボタンを、falseなら応募ボタンを表示するようにしていたのですが、
応募ボタンだけが表示されません。

該当のソースコード

plans_controller.rb

1def show 2 if user_signed_in? 3 @plan = Plan.find(params[:id]) 4 @room = Room.all.find_by(plan_id: @plan.id) 5 if @room 6 @alreadyRoom = true 7 else 8 @alreadyRoom = false 9 end 10 11 @currentUserEntry=Entry.where(user_id: current_user.id) 12 @userEntry=Entry.where(user_id: @plan.user_id) 13 unless @plan.user.id == current_user.id 14 @currentUserEntry.each do |cu| 15 @userEntry.each do |u| 16 if cu.room_id == u.room_id then 17 @isRoom = true 18 @roomId = cu.room_id 19 end 20 end 21 end 22 if @isRoom 23 else 24 @room = Room.new 25 @entry = Entry.new 26 end 27 end 28 end 29 end 30 31 def new 32 @plan = Plan.new 33 if @plan.user == current_user 34 redirect_to '/' 35 end 36 end

!インデントの修正10/08/23:01

views/plans/show.html.erb

1 <div class="plan-content-btn"> 2 <% if @isRoom == true %> 3 <%= @isRoom %> 4 <%= @alreadyRoom %> 5 <% if @alreadyRoom == true%> 6 <p class="user-show-room"><a href="/rooms/<%= @roomId %>"class="btn btn-primary btn-lg">メッセージ</a> 7 <% end %> 8 <% else %> 9  <% if @alreadyRoom == false%> 10 <%= form_for @room do |f| %> 11 <%= fields_for @entry do |e| %> 12 <%= e.hidden_field :plan_id, value: @plan.id %> 13 <%= e.hidden_field :user_id, value: @plan.user.id %> 14 <% end %> 15 <%= f.submit "応募", class:"btn btn-primary btn-lg user-show-chat"%> 16 <% end %> 17 <% end %> 18 <% end %> 19 </div>

!追記
1.@isRoom, @alreadyRoom = true : メッセージボタンを表示
2.@isRoom, @alreadyRoom = false : 応募ボタンを表示
になっているかを表示させて試してみたのですが、2の条件が@isRoomのほうがtrueと表示されていました。

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

2

ベストアンサー

html のインデントが狂ってるから気が付かないかもですが <%= f.submit "応募", が実行されるのは
@plan.user.id == current_user.id ではなく
かつ @isRoom == true ではなく
かつ @alreadyRoom == false な場合
です。
m.ts10806 さんの言われるように、 @isRoomがtrueなのでは?

この様に(プログラムする人にとって)条件が複雑な場合は頭で考えずに 目で考えられるようにしてみるよ良いです
どういう場合に @isRoom @alreadyRoom が true、false になるのか を整理し、
2x2の4つの マス==組み合わせ 毎に どういう風にしたいのか、を書いて見る。
そのとおりのcodeになっているか 確認する

もしかしたら @plan.user.id == current_user.id も含めて 8通りかも?

投稿2022/10/08 06:00

winterboum

総合スコア22817

m.ts10806👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

退会済みユーザー

退会済みユーザー

2022/10/08 14:33

インデントの修正とボタン条件の表示の条件を 1.@plan.user.id == current_user.idではない 2.@isRoom == true ではない 3.@alreadyRoom == trueではない という状態を作成してみたのですが、 Encountered a syntax error while rendering template: check <% if user_signed_in? %>というエラーが発生したのですが、調べたところボタンの箇所の<% else %>が問題っぽいのですが、<% else %>は重ねていいのでしょうか? コードはインデントを整えて質問の箇所に書き直してみました。
winterboum

2022/10/08 14:49

ということの前に .@plan.user.id @isRoom @alreadyRoom が true、false の組み合わせ毎にどうしたいのか を整理 したものを見せてください。 でないと codeのどこが悪いのか、がわかりません
退会済みユーザー

退会済みユーザー

2022/10/08 16:07

すみません。組み合わせ的には @plan.user.idなし、@isRoom, @alreadyRoom = true : メッセージボタンを表示 @plan.user.idなし、@isRoom, @alreadyRoom = false : 応募ボタンを表示 @plan.user.idなし、@isRoom = tue @alreadyRoom = false : 何も表示しない @plan.user.idなし、@isRoom = false @alreadyRoom = rue : 何も表示しない というような組み合わせにしたいです。
退会済みユーザー

退会済みユーザー

2022/10/09 03:42 編集

すみません。 もしかしたら(1.@plan.user.id == current_user.idではない)の記述はplans/show.html.erbの最初に <% if user_signed_in? %> <% if current_user == @plan.user %> で分岐させており、いらなかったかもしれません。
winterboum

2022/10/09 11:23

>すみません。組み合わせ的には ということですと、 show.html の方は合っているようにみえます。 ということは、@isRoom, @alreadyRoom が 思う値で渡っていない ということかも <div class="plan-content-btn"> <% if @isRoom == true %> の間に @isRoom, @alreadyRoom を表示させてみては?
退会済みユーザー

退会済みユーザー

2022/10/09 14:06

すみません質問でも更新して添付させて頂いたのですが 1.@isRoom, @alreadyRoom = true : メッセージボタンを表示 2.@isRoom, @alreadyRoom = false : 応募ボタンを表示 になっているかを表示させて試してみたのですが、2の条件が@isRoomのほうがtrueと表示されていました。
winterboum

2022/10/09 22:56

ということは、controller の Show を読み直してください。 今度は 「@isRoom, @alreadyRoom の組み合わせでどう表示するか」 ではなく 「@isRoom, @alreadyRoom はそれぞれどういう時にどういう値になるのか」 を整理して、そのとおりになっているか をみてください これらを決めるのはどういう項目なのか、をまず整理できているか、ですね
退会済みユーザー

退会済みユーザー

2022/10/10 02:02

if cu.room_id == u.room_id && @alreadyRoom thenにしたら 応募ボタンが出現しました。 そして押してみたところ、無事作成でき、これで掲載ごとにDM作成できるようになりました。 ありがとうございます!

0

コードが一部しかないのでなんとも言えませんが@isRoomがtrueなのでは?

インデントをきちんと整理されたほうが良いと思います。
あと、デバッグを。

投稿2022/10/08 03:48

編集2022/10/08 03:50
m.ts10806

総合スコア80598

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

退会済みユーザー

退会済みユーザー

2022/10/08 03:59

plans_controller.rbのshowページのコードを全部載せてみたのですが@isRoomをcontrollerのほうで修正する必要があるということでしょうか?
m.ts10806

2022/10/08 04:52

小手先でどうにかするのではなく一つ一つのロジックに意味を持たせてください。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.83%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Ruby on Rails

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