Обзоры Rails не отображаются на странице показа альбома - PullRequest
1 голос
/ 12 апреля 2020

Альбомы имеют много рецензий и пользователей через рецензии, рецензии принадлежат альбому и принадлежат пользователю, а у пользователей много рецензий и много альбомов через рецензии.

На моей странице показа альбомов рецензии не отображаются. Но Отзывы отображаются на странице индекса отзывов. Я не могу понять, что мне не хватает. Я не получаю никаких ошибок.

Вот мой контроллер альбомов:

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 %>

1 Ответ

0 голосов
/ 12 апреля 2020

Проблема в итерации, поскольку вместо переменной блока используется переменная экземпляра, поступающая из контроллера, она должна быть:

<% @album.reviews.each do |review| %>
  <%= review.title %>
  <%= review.content %>
<% end %>

@review - это новый экземпляр обзора (пусто ) который вы создали для формы, я думаю.

Таким образом, вместо того, чтобы показывать заголовок и содержание каждого отзыва, вы отображали один из пустого обзора, сохраненного в @review в каждой итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...