我正在尝试使用Ajax post请求创建一个新的评论来将数据发送到rails create函数,但它似乎没有起作用。 AJAX请求返回成功,但是当我检查数据库时,没有新的评论。
我的ajax请求在这里:
$.ajax({
type: "POST",
url: "/reviews/new",
data: { review: { email: review_email, rating: review_rating, comment: review_comment} },
success: function(data){
console.log("SUCC");
console.log(data);
},
error: function(data){
console.log(data);
}
});
我的Rails审查控制器如下所示:
class ReviewsController < ApplicationController
skip_before_action :verify_authenticity_token
def index
@reviews = Review.all
@review = Review.new
end
def new
@reviews = Review.new
end
def create
@email = params[:email]
@rating = params[:rating]
@comment = params[:comment]
@review = Review.create(review_params)
if @review.save
redirect_to @review
else
end
end
def show
@review = Review.find(params[:id])
end
def destroy
@review = Review.destroy(params[:id])
end
private
def review_params
params.permit(:email, :rating, :comment)
end
end
我是Rails的新手,所以很多导轨的东西可能会令人厌恶,因为我已经使用了10种不同的教程来尝试解决这个问题。
答案 0 :(得分:3)
您似乎对哪些路线做什么感到有点困惑。如果您执行bin/rails routes
(或bin/rake routes
,具体取决于您的Rails版本),您应该会看到类似这样的评论:
reviews GET /reviews(.:format) reviews#index
POST /reviews(.:format) reviews#create
new_review GET /reviews/new(.:format) reviews#new
edit_review GET /reviews/:id/edit(.:format) reviews#edit
review GET /reviews/:id(.:format) reviews#show
PATCH /reviews/:id(.:format) reviews#update
PUT /reviews/:id(.:format) reviews#update
DELETE /reviews/:id(.:format) reviews#destroy
这些是正常的REST / Rails路由,所以:
GET /reviews
用于列出一系列评论。POST /reviews
用于创建新审核,因此与此路由关联的#create
控制器方法。GET /reviews/new
用于获取&#34;创建新评价&#34;页。GET /reviews/:id/edit
用于编辑:id
评论&#34;页。GET /reviews/:id
用于获取详细信息以供审核:id
。PATCH /reviews/:id
和PUT /reviews/:id
用于更新评论:id
并提供一些新信息。DELETE /reviews/:id
用于删除评论:id
。你的$.ajax
电话正在发布到 3 (通常会使用GET),当它应该发布到 2 时,你只是使用了错误的路线。您希望在url: '/reviews'
来电中使用$.ajax
,因为POST /reviews
是您用来创建新资源的内容。