在config / routes.rb中,我有以下代码
resources :orders, param: :no do
resources :order_items, param: :line_item do
collection do
get :price
end
end
end
[如果我通过json发布到/orders/6061734/order_items
,然后我得到以下参数:
{"line_item"=>3, "stock_no"=>265062, "order_no"=>"6061734", "order_item"=>{"line_item"=>3, "stock_no"=>265062}}
对于参数白名单我有
def order_item_params
params.require(:order_item).permit(:order_no, :line_item, ...)
end
我通过json参数提交了line_item
和stock_no
,并通过url提交了order_no
。 order_item
参数是由ActionController::ParamsWrapper创建的。文档状态
在没有设置:include或:exclude选项的Active Record型号上, 只会包装class方法返回的参数 attribute_names。
order_item模型上没有设置包含或排除选项,因此我对为什么order_no参数未“包装”在order_item参数中感到困惑。是因为它是url的一部分而不是json参数的一部分?我在Rails控制台中检查了OrderItem.attribute_names。返回order_no,line_item和许多其他属性。
我不认为我的回答需要完整的答案,但是我没有足够的声誉点可以发表评论。
让我们看一下您的强参数实现。
params.require(:order_item).permit(:order_no, :line_item, ...)
使用#require
指定您允许的每个属性都存在于:order_item
子哈希中。从您发布的参数来看,:order_no
似乎位于该子哈希之外。为了获得:order_no
参数,可以使用以下参数。
params.permit(:order_no)