@YamadaMasao (masao yamada)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

トップページにログインユーザーの投稿した情報のみを表示させる方法について教えて下さい

解決したいこと

アプリのトップページに、カレントユーザーが投稿した情報のみ表示させる仕様にしたい。
Ruby on Railsで日用品の管理を行うWebアプリを作成しています。
ユーザー単位で日用品の管理を行うので、自分以外のユーザーが登録した
情報を表示させない様にしたいです。

発生している問題・エラー

全ユーザーが投稿した情報が表示されます。

### 該当するソースコード
```Ruby
コントローラー
  def index
    @want = Want.includes(:user).order('created_at DESC')
    @favorite = favorite_expiration.sort_by!{ |a| a["expiration"] }
    @expendable = expendable_expiration.sort_by!{ |a| a["expiration"] }
  end
  表示する情報が3項目あるため、それぞれインスタンス変数に代入しています。

 index.html.erb (@wantの表示のみ)
    <% if @want.present? %>
      <% @want.each do |want| %>
       <li class='list'>
        <%= link_to want_path(want.id), method: :get do %>
        <div class='item-img-content'>
          <div class='item-info'>
            <h3 class='item-name'>
              <%= want.name %>
            </h3>
          </div>
          <% if want.image.present? %>
          <%= image_tag want.image, class: "item-img" %>
          <% else%>
          <%= image_tag "https://1.bp.blogspot.com/-D2I7Z7-HLGU/Xlyf7OYUi8I/AAAAAAABXq4/jZ0035aDGiE5dP3WiYhlSqhhMgGy8p7zACNcBGAsYHQ/s1600/no_image_square.jpg", class: "item-img" %>
          <% end %>
        </div>
        <% end %>
      </li>
       <% end %>

      <% else %>

        <li class='list'>
          <%= link_to '#' do %>
            <%= image_tag "https://1.bp.blogspot.com/-D2I7Z7-HLGU/Xlyf7OYUi8I/AAAAAAABXq4/jZ0035aDGiE5dP3WiYhlSqhhMgGy8p7zACNcBGAsYHQ/s1600/no_image_square.jpg", class: "item-img" %>
               <div class='item-info'>
                    <h3 class='item-name'>
                        商品を登録してね!
                    </h3>          
                </div>
            <% end %>
        </li>
      <% end %>
    </ul>
  </div>

自分で試したこと

先ず、index.htmlの先頭のif文を変更して、current_user.idと@wantに代入したwantsテーブルのuser_idが同じか否か比較演算子を用いて確認しました。
実際には <% if current_user.id == @want.select(:user_id) %> の形にしたのですが、binding.pryを用いた確認では@wantのuser_idを抽出出来ているのですが、
実際の式では偽の判定になってしまい、投稿したユーザーでもトップページへの情報の表示がされませんでした。

次にindex.htmlの3行目に <% if current_user.id == @want.user_id %> の形で条件式を追加したのですが、今度は投稿したユーザーの情報は表示されるが、未投稿のユーザーに表示させる投稿を促す記述が表示出来なくなりました。
そこで、条件分岐を増やして<% if current_user.id == @want.user_id %> の答えが偽だった場合、未投稿のユーザーに投稿を促す表示を行う様コードを書き換えたのですが、@wantのデータ分未投稿のユーザーに投稿を促す表示が繰り返されてしまいました。(each文使ってるので当たり前でした)

最後に、トップページへ遷移する際にユーザーと紐づいた形になる様ルーティングにpathを作成し、コントローラーに user = User.find(params[:id]) と @want = user.wants を追加し、アプリケーションコントローラーにも
ログイン時上記のpathへ遷移する様記述を行いましたが、上手くいきませんでした。

もし方法をご存知の方が居られましたら、ご教示頂ければ幸いです。
何卒よろしくお願いいたします。

0 likes

No Answers yet.

Your answer might help someone💌