Rails为请求添加额外的JSON

时间:2017-01-27 03:53:45

标签: json ruby ajax http ruby-on-rails-4

我在Rails日志中注意到以下类型的条目:

Parameters: {"notes"=>"test", "name"=>"AAAA", "city"=>"city",  "country"=>"country", "label"=>{"name"=>"AAAA", "city"=>"city", "country"=>"country", "notes"=>"test"}}
Unpermitted parameter: label

我已经编写了两个不同的客户端,它们将JSON发送到在Apache上运行的Rails API应用程序。一个是Angular / Dart,另一个是Cocoa Swift for MacOS。两者都只发送JSON的第一部分(即,最多为"标签" =>)。当我不发送任何JSON数据时,我甚至会在选择所有请求中看到它(例如,{"标签" => {}})。除警告外,额外数据不会引起任何问题。有关如何摆脱重复的JSON的任何想法?我知道如何摆脱警告。

构建请求的我的Swift代码:

    let url = domain + rest
    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Accept")
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")

我没有添加" .json"到请求结束。

rake routes:

         labels GET    /labels(.:format)                    labels#index
                POST   /labels(.:format)                    labels#create
          label GET    /labels/:id(.:format)                labels#show
                PATCH  /labels/:id(.:format)                labels#update
                PUT    /labels/:id(.:format)                labels#update
                DELETE /labels/:id(.:format)                labels#destroy

我的一个控制员:

class LabelsController < ApplicationController

  def create
    @label = Label.new(label_params)
    if @label.save
      render :json => @label
    else
      render json: @label.errors, status: :unprocessable_entity
    end
  end

  ...
  private

  def label_params
    params.permit(:name, :city, :country, :notes)
  end
end

1 个答案:

答案 0 :(得分:0)

这是一个rails强参数错误。您需要告诉控制器您希望收到标签参数。

你的控制器里有这样的东西:

def person_params
  params.require(:foo).permit(:label)
end

如果您使用控制器代码发表评论,我可以为您提供更具体的答案。