远程API方法不会基于收到的参数创建记录

时间:2018-06-24 05:45:20

标签: ruby-on-rails ruby permissions

我有一个用于批量创建模型系列记录的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]})

,现在可以使用了。我不知道为什么,因为散列本来应该插入完全相同的东西。但是至少它最终可以工作。

0 个答案:

没有答案