Jquery Ajax发布请求返回成功,但Rails / Sqlite数据库没有得到更新

时间:2018-02-03 22:01:34

标签: jquery ruby-on-rails ajax sqlite

我正在尝试使用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种不同的教程来尝试解决这个问题。

1 个答案:

答案 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路由,所以:

  1. GET /reviews用于列出一系列评论。
  2. POST /reviews用于创建新审核,因此与此路由关联的#create控制器方法。
  3. GET /reviews/new用于获取&#34;创建新评价&#34;页。
  4. GET /reviews/:id/edit用于编辑:id评论&#34;页。
  5. GET /reviews/:id用于获取详细信息以供审核:id
  6. PATCH /reviews/:idPUT /reviews/:id用于更新评论:id并提供一些新信息。
  7. DELETE /reviews/:id用于删除评论:id
  8. 你的$.ajax电话正在发布到 3 (通常会使用GET),当它应该发布到 2 时,你只是使用了错误的路线。您希望在url: '/reviews'来电中使用$.ajax,因为POST /reviews是您用来创建新资源的内容。