Альбомы имеют много рецензий и пользователей через рецензии, рецензии принадлежат альбому и принадлежат пользователю, а у пользователей много рецензий и много альбомов через рецензии.
На моей странице показа альбомов рецензии не отображаются. Но Отзывы отображаются на странице индекса отзывов. Я не могу понять, что мне не хватает. Я не получаю никаких ошибок.
Вот мой контроллер альбомов:
class AlbumsController < ApplicationController
before_action :set_album, only: [:show, :edit, :update]
def index
@albums = Album.all
@current_user
end
def show
@review = @album.reviews.build
end
def new
@album = Album.new
end
def create
@album = Album.new(album_params)
if @album.save
redirect_to album_path(@album)
else
render :new
end
end
def edit
end
def update
if @album.update(album_params)
redirect_to album_path(@album), notice: "Your album has been updated."
else
render 'edit'
end
end
private
def set_album
@album = Album.find(params[:id])
end
def album_params
params.require(:album).permit(:artist, :title, :avatar)
end
end
Обзоры Контроллер:
class ReviewsController < ApplicationController
def index
@reviews = Review.all
end
def show
@review = Review.find(params[:id])
#@reviews = Review.where("album_id = ?", params[:album_id])
end
def new
@review = Review.new
end
def create
@review = current_user.reviews.build(review_params)
if @review.save
redirect_to reviews_path
else
render :new
end
end
def update
end
private
def review_params
params.require(:review).permit(:title, :date, :content, :user_id, :album_id, album_attributes:[:artist, :title])
end
end
Вот страница показа моих альбомов:
<% if @album.avatar.attached? %>
<image src="<%=(url_for(@album.avatar))%>%" style="width:350px;height:350px;">
<% end %>
<br>
<%= @album.artist %> -
<%= @album.title %>
<br>
<%= link_to "Edit Album", edit_album_path %>
<br><br><br>
<%= render '/reviews/form' if logged_in? %>
<h3>Album Reviews</h3>
<% @album.reviews.each do |review| %>
<%= review.title %>
<%= review.content %>
<% end %>
<br><br><br>
<%= link_to "All Albums", albums_path %><br>
<%= link_to "Upload a New Album", new_album_path %>
Вот мой файл маршрутов:
Rails.application.routes.draw do
get '/signup' => 'users#new', as: 'signup'
post '/signup' => 'users#create'
get '/signin' => 'sessions#new'
post '/signin' => 'sessions#create'
get '/signout' => 'sessions#destroy'
resources :albums do
resources :reviews, except: [:index]
end
resources :users
resources :reviews, only: [:index]
root to: "albums#index"
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
Вот мои модели:
class Album < ApplicationRecord
has_many :reviews
has_many :users, through: :reviews
has_one_attached :avatar
end
class Review < ApplicationRecord
belongs_to :album, optional: true
belongs_to :user
accepts_nested_attributes_for :album
end
class User < ApplicationRecord
has_secure_password
has_many :reviews
has_many :albums, through: :reviews
accepts_nested_attributes_for :reviews
end
Форма обзора:
<%= form_for :review, method: "POST",:url => { :action => :create } do |f| %>
<!-- <%= f.collection_select :album_id, Album.order(:artist),:id,:artist %> -->
<br>
<%= f.label :title %>
<%= f.text_field :title%>
<br><br>
<%= f.label :date %>
<%= f.datetime_field :date%>
<br><br>
<%= f.label :content %>
<%= f.text_area :content %>
<br><br>
<%= f.submit "Submit" %>
<% end %>