前提・実現したいこと
プログラミングスクールに通うプログラミング初心者です。
現在、ruby on rails でイベント投稿アプリを開発しています。
このアプリは、ユーザーがイベントを開催したいと考えた際に、イベント投稿を行い参加したい人を集うことができます。
そして、その投稿を見た他のユーザーはその投稿に対して、エントリーすることで参加したいという意思表明ができるようなアプリを作っています。
今回解決したいことは、ユーザーの一覧画面(users/index.html.erb)にそのユーザーが投稿している投稿の数を表示させたいということです。現在の自分の実装では、なぜかイベント投稿数ではなく、そのユーザーがエントリーしている投稿の数が表示されてしまいます。
発生している問題・エラーメッセージ
<%= user.events.count %>としても なぜかイベント投稿数ではなく、そのユーザーがエントリーしている投稿の数が表示されてしまう。
コード情報
(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 index @users = User.all end #省略
(users/index.html.erb)
<% @users.each do |user| %> <p>投稿数:<%= user.events.count %></p> <% end %>
(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, dependent: :destroy has_many :comments, dependent: :destroy has_many :entries, dependent: :destroy has_many :events, through: :entries #前に追加 end
試したこと
user.rbに
has_many :events, through: :entriesを追加しなかった場合は
ビューで<p>投稿数:<%= user.events.count %></p>と記述することでそのユーザーの投稿数が表示されるが、ユーザーがエントリーしている投稿を出せなくなる(users/show.html.erbにて
<% @user.events.each do |event| %>
user.rbに
has_many :events, through: :entriesを追加したまま、index.html.erbに投稿数を表示させる方法がありますでしょうか?
補足
自分では、user.rbに
has_many :events, through: :entries を記述したことでエントリーを通っているため、実質的にentriesテーブルのuser_idに紐ずくevent_idの数を取得してしまっているのではないかと仮説を立てて見ました、、、
回答2件
あなたの回答
tips
プレビュー