【问题标题】:Rails reviews not showing up on album show pageRails 评论未显示在专辑显示页面上
【发布时间】:2020-04-13 02:27:01
【问题描述】:

专辑有很多评论和用户通过评论,评论属于专辑,属于用户,用户有很多评论,通过评论有很多专辑。

在我的相册显示页面上,评论不显示。但评论显示在评论索引页面上。我似乎无法弄清楚我错过了什么。我没有收到任何错误。

这是我的相册控制器:

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

【问题讨论】:

  • 最重要的部分是您的模型,它们丢失了请添加它们,同时添加您的迁移文件。

标签: ruby-on-rails


【解决方案1】:

问题在于迭代,因为你使用来自控制器的实例变量而不是块变量,它应该是:

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

@review 是您为我猜想的表单创建的评论(空)的新实例。

因此,不是显示每条评论的标题和内容,而是在每次迭代中显示保存在 @review 中的空评论中的一条。

【讨论】:

  • 您确定您对正在测试的专辑有评论吗?抱歉问,但有时这是最简单的事情
  • 我这么认为???我的评论可能不会添加到每个特定专辑中,但我该如何检查呢?我会发布更多我的代码
  • 您可以在终端中使用rails c 打开rails 控制台并为特定专辑创建评论,这样您将确保您拥有良好的数据。或者,您可以在种子文件中编写一个小脚本并使用rails db:seed 运行它。
  • 为此创建另一个问题可能会更好,因为这是一个不同的主题,我们需要查看其他文件。所以打开另一个问题,我会检查你的个人资料。可能在create 中的reviews_controller 中,您需要将新评论分配给专辑。使用嵌套参数,您应该通过参数接收专辑 ID,然后您可以找到专辑 (@album = Album.find(params[:album_id]) 和 @review.album = @album。但是现在先在控制台中创建一个test review,看看这个问题是否解决了:)
  • 是的,在reviews#create 中找到专辑,然后在review.album = album 中找到我需要做的一切。新的错误和问题,但至少这个问题得到了解决:)
猜你喜欢
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2018-04-10
  • 1970-01-01
  • 2011-09-06
  • 2018-09-30
相关资源
最近更新 更多