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