我有一个用于批量创建模型系列记录的api。远程计算机将POST请求发送到我的url,并将数组@series
作为json参数传递,如下所示:
@series = [{:id=>1,name:"test"}, {:id=>2,name:"test2"}]
req = Net::HTTP::Post.new(post_uri, 'Content-Type' => 'application/json')
req.body = {series: @series}.to_json
res = http.request(req)
但是我无法终生创建各自的系列。这是接收数据的方法,应该为@series
数组中的每个哈希创建一个Series:
def api
series = params[:series]
series.each do |s|
name = s[:name]
if !Series.where(name: name).exists?
Series.create(s)
end
end
end
绝对可以传递参数,但是不会创建任何Series。当我检查日志时,出现500错误,但是由于它是远程的,所以我无法获得更具体的错误。
当我删除参数并为@series
数组中的每个哈希创建通用系列时,它就可以工作。例如,使用以下代码,如果@series
具有3个哈希,则将创建3个Series:
def post_product_data
series = params[:series]
series.each do |s|
name = s[:name]
if !Series.where(name: name).exists?
Series.create #GENERIC SERIES NOT BASED ON PARAMS
end
end
end
我认为这可能是权限问题,因此我尝试允许所有参数。但是,当我将方法更改为此时,出现了"undefined method "permit!"
错误:
def post_product_data
series = params[:series]
series.each do |s|
name = s[:name]
if !Series.where(name: name).exists?
Series.create(s.permit!) #TRIED PERMITTING ALL PARAMS
end
end
end
有人有什么想法吗?
更新
我将违规行更改为此:
Series.create({id: s[:id], name: s[:name]})
,现在可以使用了。我不知道为什么,因为散列本来应该插入完全相同的东西。但是至少它最终可以工作。