将多个项目发布到 Rails API 时的强参数
Strong params when POSTing multiple items to Rails API
我正在尝试通过对 Rails API 的 POST 请求创建多条记录,但我遇到了参数方面的问题。
发生的情况是项目没有被创建,因为模型中的回调正在寻找不存在的值。我相信这与参数有关。
这是我的代码:
def batch_create
params[:product].each do |p|
product = Product.new(batch_create_product_params)
product.save
end
respond_to do |format|
format.json { render json: @product }
end
end
def batch_create_product_params
params.permit(:name, :link, :category_old, :image_url, :price, :interest, :revenue, :end_date, :company, :country, :above_average_revenue)
end
我的 json 调用的原始内容是:
{
"product": [
{
"name": "Strap On SoftRack Roof Rack by Otium Acupressure",
"link": "https://things.com/89902997836713867011111211111121/Strap-On-SoftRack-Roof-Rack-by-Otium",
"category_old": "",
"image_url": "https://thingd-media-ec1.com/default/899029978367138670_42120cf10765.jpg",
"price": "160",
"interest": "9999",
"company": "ACME",
"country": "USA",
"revenue": "999999"
},
{
"name": "Strap On SoftRack Roof Rack by Otium Acupressure 2",
"link": "https://things.com/Strap-On-SoftRack-Roof-Rack-by-Otium",
"category_old": "",
"image_url": "https://thingd-media-ec1.com/default/899029978367138670_42120cf10765.jpg",
"price": "160",
"interest": "9999",
"company": "ACME",
"country": "USA",
"revenue": "999999"
}
]
}
得到的参数如下:
第一次调用时的总参数
Parameters: {"product"=>[{"name"=>"Strap On SoftRack Roof Rack by Otium Acupressure", "link"=>"https://fancy.com/things/89902997836713867011111211111121/Strap-On-SoftRack-Roof-Rack-by-Otium", "category_
old"=>"", "image_url"=>"https://thingd-media-ec1.thefancy.com/default/899029978367138670_42120cf10765.jpg", "price"=>"160", "interest"=>"9999", "company"=>"Fancy", "country"=>"USA", "revenue"=>"999999"},
{"name"=>"Strap On SoftRack Roof Rack by Otium Acupressure 2", "link"=>"https://fancy.com/things/Strap-On-SoftRack-Roof-Rack-by-Otium", "category_old"=>"", "image_url"=>"https://thingd-media-ec1.thefancy.
com/default/899029978367138670_42120cf10765.jpg", "price"=>"160", "interest"=>"9999", "company"=>"Fancy", "country"=>"USA", "revenue"=>"999999"}], "import"=>{}}
循环中的参数。
{"name"=>"Strap On SoftRack Roof Rack by Otium Acupressure", "link"=>"https://fancy.com/things/89902997836713867011111211111121/Strap-On-SoftRack-Roof-Rack-by-Otium", "category_old"=>"", "i
mage_url"=>"https://thingd-media-ec1.thefancy.com/default/899029978367138670_42120cf10765.jpg", "price"=>"160", "interest"=>"9999", "company"=>"Fancy", "country"=>"USA", "revenue"=>"999999"}
我相信您正在寻找的更像是这样。在 permit 调用中放置根 product
键告诉 rails 这将是一个对象数组,包含记录的键。
def batch_create
batch_create_product_params[:product].each do |product_params|
product = Product.new(product_params)
product.save
end
respond_to do |format|
format.json { render json: @product }
end
end
def batch_create_product_params
params.permit(product: [:name, :link, :category_old, :image_url, :price, :interest, :revenue, :end_date, :company, :country, :above_average_revenue])
end
我认为 new
不需要数组。我认为您需要这样做 - 在强参数中使用 p
参数。
def batch_create
params[:product].each do |p|
product = Product.new(batch_create_product_params(p)) # Pass p
product.save
end
respond_to do |format|
format.json { render json: @product }
end
end
def batch_create_product_params(p) # Accept params
p.permit(:name, :link, :category_old, :image_url, :price, :interest, :revenue, :end_date, :company, :country, :above_average_revenue)
end
create
确实需要一个数组。也许这适合你的情况。
def batch_create
product = Product.create(batch_create_product_params[:product])
respond_to do |format|
format.json { render json: @product }
end
end
def batch_create_product_params
params.permit(product: [:name, :link, :category_old, :image_url, :price, :interest, :revenue, :end_date, :company, :country, :above_average_revenue])
end
我正在尝试通过对 Rails API 的 POST 请求创建多条记录,但我遇到了参数方面的问题。
发生的情况是项目没有被创建,因为模型中的回调正在寻找不存在的值。我相信这与参数有关。
这是我的代码:
def batch_create
params[:product].each do |p|
product = Product.new(batch_create_product_params)
product.save
end
respond_to do |format|
format.json { render json: @product }
end
end
def batch_create_product_params
params.permit(:name, :link, :category_old, :image_url, :price, :interest, :revenue, :end_date, :company, :country, :above_average_revenue)
end
我的 json 调用的原始内容是:
{
"product": [
{
"name": "Strap On SoftRack Roof Rack by Otium Acupressure",
"link": "https://things.com/89902997836713867011111211111121/Strap-On-SoftRack-Roof-Rack-by-Otium",
"category_old": "",
"image_url": "https://thingd-media-ec1.com/default/899029978367138670_42120cf10765.jpg",
"price": "160",
"interest": "9999",
"company": "ACME",
"country": "USA",
"revenue": "999999"
},
{
"name": "Strap On SoftRack Roof Rack by Otium Acupressure 2",
"link": "https://things.com/Strap-On-SoftRack-Roof-Rack-by-Otium",
"category_old": "",
"image_url": "https://thingd-media-ec1.com/default/899029978367138670_42120cf10765.jpg",
"price": "160",
"interest": "9999",
"company": "ACME",
"country": "USA",
"revenue": "999999"
}
]
}
得到的参数如下:
第一次调用时的总参数
Parameters: {"product"=>[{"name"=>"Strap On SoftRack Roof Rack by Otium Acupressure", "link"=>"https://fancy.com/things/89902997836713867011111211111121/Strap-On-SoftRack-Roof-Rack-by-Otium", "category_
old"=>"", "image_url"=>"https://thingd-media-ec1.thefancy.com/default/899029978367138670_42120cf10765.jpg", "price"=>"160", "interest"=>"9999", "company"=>"Fancy", "country"=>"USA", "revenue"=>"999999"},
{"name"=>"Strap On SoftRack Roof Rack by Otium Acupressure 2", "link"=>"https://fancy.com/things/Strap-On-SoftRack-Roof-Rack-by-Otium", "category_old"=>"", "image_url"=>"https://thingd-media-ec1.thefancy.
com/default/899029978367138670_42120cf10765.jpg", "price"=>"160", "interest"=>"9999", "company"=>"Fancy", "country"=>"USA", "revenue"=>"999999"}], "import"=>{}}
循环中的参数。
{"name"=>"Strap On SoftRack Roof Rack by Otium Acupressure", "link"=>"https://fancy.com/things/89902997836713867011111211111121/Strap-On-SoftRack-Roof-Rack-by-Otium", "category_old"=>"", "i
mage_url"=>"https://thingd-media-ec1.thefancy.com/default/899029978367138670_42120cf10765.jpg", "price"=>"160", "interest"=>"9999", "company"=>"Fancy", "country"=>"USA", "revenue"=>"999999"}
我相信您正在寻找的更像是这样。在 permit 调用中放置根 product
键告诉 rails 这将是一个对象数组,包含记录的键。
def batch_create
batch_create_product_params[:product].each do |product_params|
product = Product.new(product_params)
product.save
end
respond_to do |format|
format.json { render json: @product }
end
end
def batch_create_product_params
params.permit(product: [:name, :link, :category_old, :image_url, :price, :interest, :revenue, :end_date, :company, :country, :above_average_revenue])
end
我认为 new
不需要数组。我认为您需要这样做 - 在强参数中使用 p
参数。
def batch_create
params[:product].each do |p|
product = Product.new(batch_create_product_params(p)) # Pass p
product.save
end
respond_to do |format|
format.json { render json: @product }
end
end
def batch_create_product_params(p) # Accept params
p.permit(:name, :link, :category_old, :image_url, :price, :interest, :revenue, :end_date, :company, :country, :above_average_revenue)
end
create
确实需要一个数组。也许这适合你的情况。
def batch_create
product = Product.create(batch_create_product_params[:product])
respond_to do |format|
format.json { render json: @product }
end
end
def batch_create_product_params
params.permit(product: [:name, :link, :category_old, :image_url, :price, :interest, :revenue, :end_date, :company, :country, :above_average_revenue])
end