Я новичок в рельсах. Я искал и застрял в этой проблеме уже пару дней.
Я создаю сайт, на котором есть пользователи, группы (к которым пользователи могут присоединиться), туры (которые принадлежат группам) и остановки (остановки в турах). У меня есть таблицы для каждого, а также дополнительные таблицы, связывающие их между собой по id (bandmembership, bandtourmembership, tourstopmembership).
Я следовал нескольким руководствам и использовал own_to, has_many => through, чтобы связать все это вместе, и я использовал вложенные атрибуты для успешного отображения данных с одного уровня.
Окончательный формат, который я пытаюсь отобразить,
User Name
=> Band Name #1
====> Tour Name #1
========> Tour Stop #1
========> Tour Stop #2
====> Tour Name #2
========> Tour Stop #1
========> Tour Stop #2
=> Band Name #2
====> Tour Name #3
========> Tour Stop #1
========> Tour Stop #2
и Т. Д.
В настоящее время я могу только отображать название группы без ошибок, но оно отображает одно и то же название группы 3 раза (в базе данных их 3). Когда я пытаюсь добавить туры, выдает ошибку. Я также хотел бы попытаться использовать частичное и коллекцию, чтобы разбить рендеринг каждого элемента.
Мои вопросы
Почему частичное отображение одного и того же имени 3 раза и как мне заставить его отображать правильное имя?
Почему я не могу получить доступ к турам групп и как заставить его сотрудничать?
представления/пользователи/show.html.erb
<h1>Dashboard</h1>
<%= render partial: 'shared/user_item' %>
<% if @user.bands.any? %>
<h2>You are in <%= @user.bands.count %> bands:</h2>
<%= render partial: 'shared/band_item', collection: @band_items %>
<% else %>
общий/_band_item.html.erb
<%= @band.name %>
общий/_tour_item.html.erb
<%= @tour.name %>
общий/_stop_item.html.erb
<%= @stop.name %>
controllers/users_controller.rb
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
sign_in @user
flash[:success] = "You are now signed in"
redirect_to @user
else
render 'new'
end
end
def show
@user = User.find(params[:id])
@band_items = Bandmembership.where(user_id: @user.id)
@band = Band.find(params[:id])
end
def new
@user = User.new
end
private
def user_params
params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation)
end
end
модели/user.rb
class User < ActiveRecord::Base
has_many :bandmemberships
has_many :bands, :through => :bandmemberships
has_many :tours, :through => :bands
accepts_nested_attributes_for :bands, :tours
end
models/bandmembership.rb
class Bandmembership < ActiveRecord::Base
belongs_to :user
belongs_to :band
end
models/tour.rb
class Tour < ActiveRecord::Base
has_many :tourstopmemberships
has_many :stops, :through => :tourstopmemberships
has_many :bandtourmemberships
has_many :bands, :through => :bandtourmemberships
accepts_nested_attributes_for :stops
end