Ruby on rails Json post hasMany到Rails 4失败,参数未经允许
我试图将json消息发布到Rails 4.1.1服务器,但由于参数未经允许而失败。我也在使用Mongoid,并通过POST和内容类型的application/json提交 这是我的域名: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
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。这个问题是由于在收集物品时没有{}。见我上面的答案。谢谢