Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails应用程序-显示额外记录_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails应用程序-显示额外记录

Ruby on rails Rails应用程序-显示额外记录,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个应用程序,允许用户将他们喜欢的相册添加到数据库中。然后,任何人都可以过来为这张专辑写评论。很简单 我遇到了一个问题,在每张专辑的显示页面上都会为评论创建一个额外的记录。每个相册,即使从未被审阅过,在我使用时都会显示一个额外的、看似空的审阅。每个相册都可以在“相册显示”页面中显示每个审阅。我想摆脱它 这是问题的图像。我使用CSS以红色突出显示评论。如您所见,底部有一个空的评论。当我检查有问题的评论时,它的标题是“尚未评论!” 这是我的相册控制器: class AlbumsControll

我有一个应用程序,允许用户将他们喜欢的相册添加到数据库中。然后,任何人都可以过来为这张专辑写评论。很简单

我遇到了一个问题,在每张专辑的显示页面上都会为评论创建一个额外的记录。每个相册,即使从未被审阅过,在我使用时都会显示一个额外的、看似空的审阅。每个相册都可以在“相册显示”页面中显示每个审阅。我想摆脱它

这是问题的图像。我使用CSS以红色突出显示评论。如您所见,底部有一个空的评论。当我检查有问题的评论时,它的标题是“尚未评论!”

这是我的相册控制器:

class AlbumsController < ApplicationController
  before_action :set_album, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, only: [:edit, :new, :update, :destroy]

  def index
    @albums = Album.all
    if params[:search].nil?
      @albums = Album.all.order(year: :desc).order(title: :asc).paginate(:page => params[:page], :per_page => 24)
    else
      @albums = @albums.where("albums.title || albums.year || albums.artist LIKE ?", "%#{params[:search]}%").order(year: :desc).order(title: :asc).paginate(:page => params[:page], :per_page => 24)
    end
  end

  def show
     if @album.reviews.blank?
      @average_review = 0
     else
      @average_review = @album.reviews.average(:rating).round(2)
     end
     @review = @album.reviews.build
   end

   def new
     @album = Album.new
   end

   def edit

   end

   def create
     @album = current_user.albums.build(album_params)

     respond_to do |format|
      if @album.save
         format.html { redirect_to @album, notice: 'Album was successfully created.' }
        format.json { render :show, status: :created, location: @album }
      else
        format.html { render :new }
        format.json { render json: @album.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
     respond_to do |format|
      if @album.update(album_params)
        format.html { redirect_to @album, notice: 'Album was successfully updated.' }
        format.json { render :show, status: :ok, location: @album }
      else
        format.html { render :edit }
        format.json { render json: @album.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @album.destroy
    respond_to do |format|
      format.html { redirect_to albums_url, notice: 'Album was successfully    destroyed.' }
      format.json { head :no_content }
    end
  end

private
# Use callbacks to share common setup or constraints between actions.

def set_album
  @album = Album.find(params[:id])
end

def album_params
  params.require(:album).permit(:title, :artist, :year, :cover)
end
end
@review = Review.new(album: @album)
class AlbumsControllerparams[:page],:per_page=>24)
其他的
@albums=@albums.where(“albums.title | | | albums.year | | | albums.Artister LIKE?”,“%#{params[:search]}%”。顺序(year::desc)。顺序(title::asc)。分页(:page=>params[:page],:per\u page=>24)
结束
结束
def秀
如果@album.reviews.blank?
@平均审查=0
其他的
@average_review=@album.reviews.average(:rating).round(2)
结束
@review=@album.reviews.build
结束
def新
@album=album.new
结束
定义编辑
结束
def创建
@album=当前用户.albums.build(album参数)
回应待办事项|格式|
如果@album.save
format.html{将_重定向到@album,注意:“album已成功创建”。}
format.json{render:show,status::created,location:@album}
其他的
format.html{render:new}
format.json{render json:@album.errors,status::unprocessable_entity}
结束
结束
结束
def更新
回应待办事项|格式|
if@album.update(album_参数)
format.html{将_重定向到@album,注意:'album已成功更新。}
format.json{render:show,status::ok,位置:@album}
其他的
format.html{render:edit}
format.json{render json:@album.errors,status::unprocessable_entity}
结束
结束
结束
def销毁
@毁灭
回应待办事项|格式|
format.html{重定向到相册url,注意:'相册已成功销毁。}
format.json{head:no_content}
结束
结束
私有的
#使用回调在操作之间共享公共设置或约束。
def set_相册
@album=album.find(参数[:id])
结束
def相册参数
参数要求(:相册)。许可证(:标题,:艺术家,:年份,:封面)
结束
结束
这是相册显示页面,在该页面上显示额外的评论:

<div class="row">
<div class="col-xs-10 col-md-6 col-md-push-3 col-xs-push-1 top bottom">
    <%= image_tag @album.cover, class: 'show_image' %>
    <h2><%= @album.title %></h2>
    <h4><%= @album.artist %></h4>
    <h5><%= @album.year %></h5>
    <p class="white">Average Review<div class="average-review-rating" data-score=<%= @average_review %>></div></p>
    <% if user_signed_in? %>
        <% if @album.user_id == current_user.id %> 
            <%= link_to 'Edit', edit_album_path(@album), class: 'grey' %> 
            | <%= link_to 'Delete', album_path, method: :delete, data: {confirm: "Are you sure?"}, class: 'grey' %>
        <% end %> 
    <% end %>
    <br /><br />
    <h4>Reviews</h4>
    <% if user_signed_in? %>
        <p class="grey">Write a review</p> 

        <%= form_for [@album, @review] do |r| %>
            <div class="form-group">
                <div id="rating-form">
                    <label>Rating</label>
                </div>  
            </div>
            <div class="form-group">
                <%= r.text_area :comment, class: 'form-control', placeholder: "Write a comment" %>
            </div>
            <div class="form-group">
                <%= r.submit "Create", class: 'btn btn-success' %>
            </div>
        <% end %> 
    <% end %> 

    <br />
    <% @album.reviews.each do |r| %>
        <div class="red">
            <div class="review-rating" data-number="<%= r.rating %>">
            </div>
            <p class="white"><%= r.comment %></p>
            <% if user_signed_in? %>
                <% if current_user.id == r.user_id %> 
                    <%= link_to 'Edit', edit_album_review_path(@album, r.id), class: 'grey' %> |
                    <%= link_to 'Delete', album_review_path(@album, r.id), method: :delete, data: {confirm: "Are you sure?"}, class: 'grey' %>
                <% end %> 
            <% end %>
            <br /><br />
        </div>
    <% end %>
</div>
</div>



<script> 
$('.review-rating').raty({
readOnly: true,
score: function() {
    return $(this).attr('data-number');
},
path: '/assets/'
});

$('#rating-form').raty({
path: '/assets/',
scoreName: 'review[rating]'
});

$('.average-review-rating').raty({
readOnly: true,
path: '/assets/',
score: function() {
    return $(this).attr('data-score')
}
});
</script>

平均审查

|

评论

写一篇评论 评级

|

美元(“.审查评级”).raty({ 只读:对, 分数:函数(){ 返回$(this.attr('data-number'); }, 路径:'/assets/' }); $(“#评级表”).raty({ 路径:'/assets/', scoreName:“审查[评级]” }); 美元(“.平均审查评级”).raty({ 只读:对, 路径:'/assets/', 分数:函数(){ 返回$(this.attr('data-score')) } });

任何帮助都将不胜感激

我想可能是因为
show
中的最后一行

@review = @album.reviews.build

它生成一个空评论。

这里的问题出现在
show
方法的最后一行:
@review=@album.reviews.build
。此行不仅创建一个新的
Review
实例并将其分配给
@Review
,还将该实例添加到
@album.reviews
中的数组中。因此,在您的视图中,当您在
@album.reviews
上迭代时,您将看到所有持久化的评论,以及使用
build
生成的一个新的非持久化评论

解决此问题的最简单方法是在视图中添加以下行:

<% @album.reviews.each do |r| %>
  <% next unless r.persisted? %>

我只想继续问一个愚蠢的问题,你检查过你的数据库以确保没有空的评论吗?谢谢你非常彻底的回答!