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

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

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

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

解決済

片方のuserがいないときのDM一覧

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

1回答

0グッド

0クリップ

179閲覧

投稿2022/10/19 16:42

編集2022/10/26 10:14

概要

1.物理削除式の退会機能を作成。

2.DM機能の部屋にあたるroomは削除できない。

3.そのため相手方のDM一覧ではuserに関するエラーが発生した。

4.userが片方だけ残った時のDMは表示させないようにするためにはcontrollerとviewsどちらでifをかけるとよいのかわからない。

発生している問題・エラーメッセージ

NoMethodError at /rooms undefined method `user' for nil:NilClass Hint: Something is `nil` when it probably shouldn't be. block in _app_views_rooms__room_html_erb__2669934277696239725_72660app/views/rooms/_room.html.erb <% @rooms.zip(@anotherEntries) do |room,entry| %> <div class="dm-list-box"> <div class="dm-list-conent"> <div class="dm-list-user-name"> <h5>相手:</h5> <p><%= link_to entry.user.name, user_path(entry.user), class: "text-decoration-none" %></p><br /> ←エラー箇所 </div> <div class="dm-list-plan-name"> <h5>掲載名:</h5> <p><%= link_to room.room_name, plan_path(room.plan_id), class: "text-decoration-none" %></p> </div>

該当のソースコード

views/rooms/index.html.erb

1<div class="dm-list"> 2 <h4>メッセージ一覧</h4> 3 <p><%= render 'room', rooms: @rooms %></p> 4</div>

views/rooms/_room.html.erb

1<div> 2 <% @rooms.zip(@anotherEntries) do |room,entry| %> 3 <% if entry.nil? %> 4 <% else %> 5 <div class="dm-list-box"> 6 <div class="dm-list-conent"> 7 <div class="dm-list-user-name"> 8 <h5>相手:</h5> 9 <p><%= link_to entry.user.name, user_path(entry.user), class: "text-decoration-none" %></p><br /> 10 </div> 11 <div class="dm-list-plan-name"> 12 <h5>掲載名:</h5> 13 <p><%= link_to room.room_name, plan_path(room.plan_id), class: "text-decoration-none" %></p> 14 </div> 15 </div> 16 <div class="dm-list-btn"> 17 <p><%= link_to 'メッセージ', room, class: "btn btn-outline-danger btn-lg" %></p> 18 </div> 19 </div><br /> 20 <% end %> 21 <% end %> 22 <div class="d-flex justify-content-center mb-2"> 23 <%== pagy_bootstrap_nav(@pagy) %> 24 </div> 25</div> 26

rooms_controller.rb/indexアクション

1def index 2 @pagy,@rooms = pagy(Room.all.select(:id,:room_name,:plan_id), items:10) 3 @currentEntries = current_user.entries 4 myRoomIds = [] 5 6 @currentEntries.each do |entry| 7 myRoomIds << entry.room.id 8 end 9 10 @anotherEntries = Entry.where(room_id: myRoomIds).where('user_id != ?',current_user.id) 11 12 end

下のメッセージが2人のuserがしっかりとまだいるにもかかわらず、退会済のユーザーと表示しています。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

no1knows

2022/10/21 00:25

すいません。下記回答は質問の意図を把握できていないため削除依頼をださせていただきました。 どちらでも良いとは思うのですが、Viewだと<% @rooms.zip(@anotherEntries) do |room,entry| %>のあとにif entry.user.present?とかで条件分岐すると良いかと思うのですが、いかがでしょうか?
退会済みユーザー

退会済みユーザー

2022/10/21 04:10

<% if entry.nil? %>で条件分岐を行ったところ 退会したユーザーとのメッセージは表記しなくなったのですが、 何か違和感があると思い、色々と調べたところ、応募したてのメッセージや最新のメッセージもuserが入っていないとし、消されてしまいました。 退会もしていないのにもかかわらず、最新のメッセージだけが退会userのメッセージと同じくカウントされてしまうのはifが悪いのでしょうか? それともcontorllerが悪いのでしょうか?
no1knows

2022/10/21 05:05

下記で試してみていただけますか? <% @rooms.zip(@anotherEntries) do |room,entry| %> <% if entry.nil? %> <% else %> <% if entry.user.present? %> ←投稿した人の有無を確認   : <% end %>
退会済みユーザー

退会済みユーザー

2022/10/21 06:37 編集

試したのですが、変化はありませんでした。 掲載から、メッセージに飛ぶこともできるので、そこから条件分岐で除外されているメッセージを確認したところ、中にしっかりと2人のユーザーが入っているので、_room.html.erb内か、コントローラーの_room.html.erbへのデータの受け渡し方が問題なのでしょうか?
退会済みユーザー

退会済みユーザー

2022/10/21 06:49

今、userがいない場合に”退会済のユーザー”と表記させるようなコードで試したところ、 しっかりと中にuserがいるにもかかわらず上記の表示をしました。 試した、コード <div> <% @rooms.zip(@anotherEntries) do |room,entry| %> <div class="dm-list-box"> <div class="dm-list-conent"> <div class="dm-list-user-name"> <h5>相手:</h5> <% if entry.nil? %> <p>退会済みのユーザー</p> <% else %> <p><%= link_to entry.user.name, user_path(entry.user), class: "text-decoration-none" %></p><br /> <p><%= link_to entry.user.name, user_path(entry.user), class: "text-decoration-none" %></p><br /> <% end %> </div> <div class="dm-list-plan-name"> <h5>掲載名:</h5> <p><%= link_to room.room_name, plan_path(room.plan_id), class: "text-decoration-none" %></p> </div> </div> <div class="dm-list-btn"> <p><%= link_to 'メッセージ', room, class: "btn btn-outline-danger btn-lg" %></p> </div> </div><br /> <% end %> <div class="d-flex justify-content-center mb-2"> <%== pagy_bootstrap_nav(@pagy) %> </div> </div>
退会済みユーザー

退会済みユーザー

2022/10/21 08:58

新しく分かったのですが、一番上のメッセージが見れず、おかしいのでデータの表示か受け渡しがおかしいのかなと思っていますが合っていますか?
退会済みユーザー

退会済みユーザー

2022/10/21 10:10

とりあえず退会機能で書いていたモデルm割の関連定義を元に戻したところ、退会者さけ外し、リンクもうまく繋げたかもしれません。 ありがとうございます。

回答1

1

ベストアンサー

<% if entry.nil? %>で条件分岐を行い、ユーザーがいないときのメッセージ一覧の表示を変えることができました。

投稿2022/10/21 10:11

退会済みユーザー

退会済みユーザー

総合スコア0

no1knows👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Ruby

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。