【发布时间】:2015-02-26 21:33:12
【问题描述】:
我看不出为什么我的错误没有从下面的代码中显示出来。我有一家餐厅 1 到很多的评论都属于用户(设计模型)。当用户发布评论时,会发出 AJAx 发布请求,回调会在页面上显示新的评论对象。评论控制器创建操作有一个条件,如果restaurants.reviews 可以找到带有user_id 或current_user 的评论,它会给出一个flash 错误通知和redirects_to /restaurants。一切似乎都很好,如果 current_user 已经对餐厅进行了评论,则不会创建评论,并且没有显示任何错误,但是尽管服务器日志表明它有,但错误没有呈现:
Rendered restaurants/_review_errors_form.html.erb (0.1ms)
Rendered restaurants/index.html.erb within layouts/application (20.3ms)
Completed 200 OK in 90ms (Views: 86.4ms | ActiveRecord: 2.7ms)
这是我的reviews_controller.rb:
def create
@restaurant = Restaurant.find(params[:restaurant_id])
@review = @restaurant.reviews.new(params[:review].permit(:thoughts, :rating))
if @restaurant.reviews.find_by user_id: current_user.id
flash[:notice] = "You already reviewed this restaurant!"
redirect_to '/restaurants'
else
@review.user = current_user
@review.save
render 'create', content_type: :json
end
end
这是我的restaurants.js:
$(document).ready(function(){
$('.new_review').on('submit', function(event){
event.preventDefault();
var reviewList = $(this).siblings('ul');
var currentRestaurant = $(this).parent();
$.post($(this).attr('action'), $(this).serialize(), function(review){
// if(review)
var newReview = Mustache.render($('#review_template').html(), review);
reviewList.append(newReview);
currentRestaurant.find('.review_count').text(review.restaurant.review_count)
currentRestaurant.find('.average_rating_number').text(review.restaurant.average_rating);
currentRestaurant.find('.average_rating_stars').text(review.restaurant.average_rating_stars);
}, 'json' );
});
});
Application.html.erb 确实显示错误:
<%= notice %>
<%= alert %>
_review_errors 部分全部写好:
<% if @review.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@review.errors.count, "error") %> prohibited this review from being saved:</h2>
<ul>
<% @review.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
在过去的几天里,我一直在玩很多不同的语法,以更好地理解这一点并尝试让事情按我的意图工作,我似乎在某些配置下可以很好地呈现错误,但是对于我的生活我现在不能回到那里。我认为这与控制器语法有关。有什么想法吗?
【问题讨论】:
标签: javascript ruby-on-rails ajax model-view-controller