Ruby on rails Json post hasMany到Rails 4失败,参数未经允许

Ruby on rails Json post hasMany到Rails 4失败,参数未经允许,ruby-on-rails,ruby,json,mongoid,Ruby On Rails,Ruby,Json,Mongoid,我试图将json消息发布到Rails 4.1.1服务器,但由于参数未经允许而失败。我也在使用Mongoid,并通过POST和内容类型的application/json提交 这是我的域名: class Sale include Mongoid::Document include Mongoid::Timestamps field :internalId, type: String embeds_many :saleItems accepts_nested_attribut

我试图将json消息发布到Rails 4.1.1服务器,但由于参数未经允许而失败。我也在使用Mongoid,并通过POST和内容类型的application/json提交

这是我的域名:

class Sale
  include Mongoid::Document
  include Mongoid::Timestamps

  field :internalId, type: String

  embeds_many :saleItems

  accepts_nested_attributes_for :saleItems

end
以下是控制器代码:

    def sale_params
      params.require(:sale).permit(:internalId, :parentInternalId, :externalId, :internalIdForStore, :internalIdForCustomer, :sendReceiptType, :saleItems)
    end


 # POST /sales
  # POST /sales.json
  def create
    @sale = Sale.new(sale_params)


    #####################

    puts "parent: "
    puts @sale.inspect

    puts "collections: "

    @sale.saleItems.each do |si|
       puts "collection here"
       puts si.inspect
    end


    respond_to do |format|
      if @sale.save
        format.html { redirect_to @sale, notice: 'Sale was successfully created.' }
        format.json { render action: 'show', status: :created, location: @sale }
      else
        format.html { render action: 'new' }
        format.json { render json: @sale.errors, status: :unprocessable_entity }
      end
    end
  end
我已经成功地在rails之外保存了集合saleItems,并且仅使用ruby脚本通过Mongoid成功地保存了集合

以下是JSON内容:

{
    "sale" : {
        "internalId":"77E26804-03CC-4CA9-9184-181C2D8CB02A"
        "saleItems" : [
              {
                "inventoryName" : "inv 1"
              },
              {
                "inventoryName" : "inv 2"
              }
        ]      

    }
}

我认为问题在于允许的强大参数

你有

 params.require(:sale).permit(:internalId, :parentInternalId, :externalId, :internalIdForStore, :internalIdForCustomer, :sendReceiptType, :saleItems)
但是salesItems是另一类。你需要像这样的东西

 params.require(:sale).permit(:internalId, :parentInternalId, :externalId, :internalIdForStore, :internalIdForCustomer, :sendReceiptType, :saleItems_attributes  => [:inventoryName, :anotherAttribute, :stillAnotherAttribute])

我认为问题在于允许的强大参数

你有

 params.require(:sale).permit(:internalId, :parentInternalId, :externalId, :internalIdForStore, :internalIdForCustomer, :sendReceiptType, :saleItems)
但是salesItems是另一类。你需要像这样的东西

 params.require(:sale).permit(:internalId, :parentInternalId, :externalId, :internalIdForStore, :internalIdForCustomer, :sendReceiptType, :saleItems_attributes  => [:inventoryName, :anotherAttribute, :stillAnotherAttribute])

哇,我知道了。它需要在项目集合周围有{}

params.require(:sale).permit(:internalId, :parentInternalId, :externalId, :internalIdForStore, :internalIdForCustomer, :sendReceiptType, 
{:saleItems => [:inventoryName, :internalIdForSeller]})
这是我找到的帮助解决问题的帖子


哇,我想出来了。它需要在项目集合周围有{}

params.require(:sale).permit(:internalId, :parentInternalId, :externalId, :internalIdForStore, :internalIdForCustomer, :sendReceiptType, 
{:saleItems => [:inventoryName, :internalIdForSeller]})
这是我找到的帮助解决问题的帖子


请编辑您的答案,告诉我您将获得什么
params

事情是
params
是数据结构,它是一个请求对象。而
permit
是一种允许特定参数的方法


因此,放置
调试器
,您将很容易识别出问题所在。

请编辑您的答案,告诉我您将使用什么
参数

事情是
params
是数据结构,它是一个请求对象。而
permit
是一种允许特定参数的方法


因此,放置
调试器
,您将很容易发现问题所在。

我尝试过,但没有成功。我尝试了很多不同的许可证声明,但肯定是一个带有强参数的问题。2件事:你能发布你的日志吗?您可能想考虑将字段转换为ruby标准命名约定。检查一下,开始吧。这可能与你的问题有关,因为你的参数是如何匹配的。我知道了,所以我发布了一个答案,但是你的ruby风格指南非常值得。我是ruby新手,所以我带着一些Java包袱进入ruby/rails。这个问题是由于在收集物品时没有{}。见我上面的答案。谢谢,我试过了,但运气不好。我尝试了很多不同的许可证声明,但肯定是一个带有强参数的问题。2件事:你能发布你的日志吗?您可能想考虑将字段转换为ruby标准命名约定。检查一下,开始吧。这可能与你的问题有关,因为你的参数是如何匹配的。我知道了,所以我发布了一个答案,但是你的ruby风格指南非常值得。我是ruby新手,所以我带着一些Java包袱进入ruby/rails。这个问题是由于在收集物品时没有{}。见我上面的答案。谢谢