Метод удаленного API не будет создавать записи на основе полученных параметров - PullRequest
0 голосов
/ 24 июня 2018

У меня есть 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:

  def api
    series = params[:series]
    series.each do |s|
      name = s[:name]
      if !Series.where(name: name).exists?
        Series.create(s)
      end
    end
  end

Параметры определенно пропущены, но Серии не созданы. Когда я проверяю свои журналы, появляется ошибка 500, но, поскольку она удаленная, у меня нет возможности получить более конкретную ошибку.

Когда я удаляю параметры и просто создаю общую серию для каждого хеша в массиве @series, это работает. Например, с помощью следующего кода, если @series имеет 3 хэша, создается 3 серии:

  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

У кого-нибудь есть идеи?


UPDATE

Я изменил оскорбительную строку на это:

Series.create({id: s[:id], name: s[:name]})

и теперь это работает. Я понятия не имею, почему, поскольку хэши должны были вставлять одно и то же. Но, по крайней мере, это работает, наконец.

...