前提・実現したいこと
プログラミングスクールに通うプログラミング初心者です。
現在、ruby on rails でイベント投稿アプリを開発しています。
このアプリには、イベントを投稿する機能、ユーザー管理機能、エントリー機能があります。
イベントの投稿に対して、参加したいという意思を表すためにその投稿にエントリーができるようにしています。
私が今回実現させたいことは、ユーザーのマイページに自分自身がエントリーしているイベントの情報だけを持って来ることです。
発生している問題・エラーメッセージ
投稿されている全てのイベントを持ってくることはできるが、それをどうすれば自分がエントリーしているイベントだけを表示させることができるのかがわからない。
データベース・テーブル情報
![イベント投稿のテーブル](3d3c1231159a361948961680b351dc97.png) ![ユーザー管理テーブル](f63fd57245834f0921bf59328e01d1ce.png) ![エントリー情報テーブル](9f0472fabb2e60182429db77e1d555fb.png) 行いたいことは、エントリーのテーブルのuser_id(エントリーをしたユーザーのid)と現在ログインしているユーザーの情報が一致しているイベントの情報を表示させたい。 あくまで、エントリーの情報を表示させるのではなく、自分がエントリーした「イベントの投稿」を表示させたいです。
(routes.rb) Rails.application.routes.draw do devise_for :users root to: 'home#top' resources :users resources :events do resources :comments, only: :create resources :entries, only: [:index, :new, :create] end end 入子構造になっています。
(users_controller.rb) #マイページに関わらないと判断し、省略しました。 (省略) def show @user = User.find(params[:id]) #@userはshow.html.erbに載せていませんが、このページで使用しています。 @events = Event.all @entries = Entry.all end (省略)
(show.html.erb)マイページのビューです。 # ひどいコードですが自分なりに考えて、とにかくできそうなことをしてみた結果です。 <div class="container"> <% @events.each do |event| %> <div class="row"> <% @entries.each do |entry| %> <% if current_user.id == entry.user_id %> <%= event.title %> </div> <% end %> <% end %> <% end %> </div>
(entry.rb)モデル class Entry < ApplicationRecord belongs_to :user belongs_to :event end
(event.rb) class Event < ApplicationRecord (#省略) belongs_to :user has_many :comments has_many :entries (#省略) end
(user.rb) class User < ApplicationRecord (#省略) has_many :events has_many :comments has_many :entries end
試したこと
users_controller.rbに
@events = Event.all
@entries = Entry.all
とし、マイページのビューによくないコードかとは思いますが、eachの中にeachを使いました。
補足
インデントが揃っておらず無駄な記述も多いためとても見にくいコードかと思います。これから、勉強を進めていく中で、マシなコードが書けるよう努力しますので、アドバイスいただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。