【发布时间】:2014-12-29 17:25:40
【问题描述】:
我不知道是什么阻止了我的代码没有将 AJAX 渲染到应有的位置,我有一个不太严重的 JS“解析错误”,我也无法解决。
我有一个默认的阻止 rails form_for 在提交事件时 jQuery 找到元素及其属性值,通过适当的操作将它们发布到模型,然后模型用新对象响应并应该通过 jbuilder 表单呈现 JSON .
当我通过重定向而不是通过渲染“创建”来渲染页面时,一切都很好,content_type::json,显示的错误是缺少模板错误。我还从网络响应中看到它“无法加载响应数据”。 views/reviews/create.json.jbuilder 保存在正确的位置我相信,类和 id 名称都是正确的我相信,文件和文件夹的命名正确并且我相信在正确的位置,我看不到任何错误?不确定是 jbuilder 错误、控制器语法错误还是 jQuery 语法错误。这是我的代码:
controllers/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_path
else
@review.user = current_user
@review.save
# redirect_to restaurants_path, will do a redirect, but defeats AJAX purpose!
render 'create', content_type: :json # results in a missing template error #'missing templete reviews/create' error
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 # This line results in Uncaught SyntaxError: Unexpected Identifier
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');
});
});
views/restaurants/index.html.erb(jbuilder 模板元素):
<template id='review_template'>
<li>
<strong>{{ star_rating }}</strong> -*- {{ thoughts }}
</li>
</template>
views/reviews/create.json.jbuilder:
json.thoughts @review.thoughts
json.star_rating star_rating(@review.rating)
json.restaurant do
json.average_rating number_with_precision(@restaurant.average_rating,
precision: 1)
json.average_rating_stars star_rating(@restaurant.average_rating)
json.review_count pluralize(@restaurant.reviews.count, 'reviews')
end
为了解决这个问题已经花了好几个小时了,噗!!知道我哪里错了吗?我在这里的某个地方做了什么很暗淡的事情吗?谢谢。
【问题讨论】:
-
如果有服务器发送的错误信息,能否给出?
-
确切的错误消息是:缺少模板评论/创建,应用程序/创建与 {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}。在以下位置搜索:*“/Users/james/Makers/week8/yelp/app/views”*“/Users/james/.rvm/gems/ruby-2.1.5/gems/devise-3.4.1/app/views”
-
无论 jbuilder 模板在那里,views/reviews/create.json.jbuilder。请注意,当使用重定向“/restaurants”语法(上面注释掉)时,chrome 控制台中的网络响应不会加载任何数据。使用重定向“/restaurants”时,会创建对象,并通过整页刷新显示。只是没有通过 json 显示。
标签: ruby-on-rails ajax json jbuilder