####やりたいこと
中間テーブルを通じてデータを取得したいと思っています
学校テーブル 大会テーブルを用意しています
学校テーブルには大会に参加する学校名が、大会テーブルには大会名が入っています
学校は複数の大会に出場でき、大会には複数の学校が参加している、多対多になるので中間テーブルを組みました
中間テーブル(tournament_schools)を通じて、schoolsテーブルに保存されている,大会名(name)を全て取得したいと思っています
######NoMethodErrorが発生
new.html.erbの2行目で、undefined method `tournament_schools'が発生します
※必要なとこだけ書いています
class SchoolsController < ApplicationController def new @school = School.new @schools = School.all end
new.html.erb
<div class="schools"> <% @schools.tournament_schools.each do |schools|%> <%= schools.tournament.name%> <%end%> </div> </div>
試しに以下のように変えてみると出力できるのですが、全て出力したいです
@schools = School.find(id: 1)
###各テーブルマイグレーション
中間テーブル
class CreateTournamentSchools < ActiveRecord::Migration[5.2] def change create_table :tournament_schools do |t| t.references :school, foreign_key: true t.references :tournament, foreign_key: true t.timestamps end end end
学校テーブル
class CreateSchools < ActiveRecord::Migration[5.2] def change create_table :schools do |t| t.string :name t.timestamps end end end
大会テーブル
class CreateTournaments < ActiveRecord::Migration[5.2] def change create_table :tournaments do |t| t.string :name t.timestamps end end end
###モデルファイル
中間(tournament_school.rb)
class TournamentSchool < ApplicationRecord belongs_to :school belongs_to :tournament end
大会(tournament.rb)
class Tournament < ApplicationRecord has_many :tournament_schools has_many :schools, through: :tournament_schools validates :name,presence: true,uniqueness: true end
学校(school.rb)
class School < ApplicationRecord has_many :tournament_schools has_many :tournaments, through: :tournament_schools validates :name,presence: true end
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/18 12:19