Rails Strong Params无法识别通过Ajax Post发送的params

时间:2016-12-18 01:59:20

标签: javascript jquery ruby-on-rails ruby ajax

您好我正在尝试将以下参数从前端发送到我的后端rails控制器,我设置了强大的参数 我的ajax调用看起来像这样

$("#send").click(function() {
        var message = $("#message").val();
        var listing_id = $("#listing_id").val();
        d = {
            'message': message, 
            'listing_id': listing_id,
            'status': "pending"
        };

        $.ajax({
           type: "POST",
           url: "/crecits",
           data: d
        });
    }); 

这是将以下参数发送到控制器

Parameters: {"message"=>"Hello world", "listing_id"=>"1", "status"=>"some status"}

然后处理此问题的控制器看起来像这样

class CrecitsController < ApplicationController
..
def create
        @crecit = current_user.crecits.new(crecits_params)
        respond_to do |format|
          if @crecit.save
            format.html { redirect_to @crecit, notice: 'Request Sent' }
          else
            format.html { redirect_to listings_path, notice: 'your request can not be sent' }
          end
        end
    end

private
      def crecits_params
         params.require(:crecit).permit(:user_id, :status, :listing_id,    :message)
      end
..
end

1 个答案:

答案 0 :(得分:2)

如果你有这样的参数:

params.require(:crecit).permit(:user_id, :status, :listing_id,    :message)

那要求你的参数这样进来:

{
  crecit: {
    user_id: ...,
    status: ...,
    etc
  }
}

但是你的AJAX正在发送没有外部crecit哈希值的参数。

您可以更改AJAX数据以发送嵌套哈希值,也可以将其保持不变,而是删除.require(:crecit)。即它只是params.permit(:user_id, :status, etc)