Есть ли способ запросить пустой столбец json в postgresql db и сравнить его с другими объектами json? - PullRequest
0 голосов
/ 01 января 2019

У меня та же проблема, описанная в этом вопросе. PostgreSQL: сравните jsons

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

то, что я пытался использовать json::text, но это означает, что я долженсделать запрос для каждой настройки ключей и значений json.

    ## for checking the empty query and if not empty, i loop through the json objects
    if metadata.to_s == '{}' || metadata.to_s == ''
      gears = gear_query.where("metadata::text = ?", metadata.to_s)
    else
      gears = gear_query.each.collect{ |g| g if g.eq_metadata?(metadata) }.compact
    end

    ## looping through all the shapes of the json objects 
    ## and calling diff function to recognize if the objects are different or not

  def eq_metadata?(metadata)
    src_mtd = self.metadata.sort_by { |k, v| k }.to_h
    new_mtd = metadata.sort_by { |k, v| k }.to_h
    src_keys = src_mtd.keys.each.map(&:to_sym)
    new_keys = new_mtd.keys.each.map(&:to_sym)
    ((src_keys == new_keys) && (src_mtd.values == new_mtd.values))
  end

Я думаю, что есть лучший способ, или что я что-то упустил с моим кодом.Мой вопрос не о необработанных SQL-запросах, а о способе сравнения содержимого объектов json, хранящихся в базе данных, с объектом json в руках.я выбрал способ получить все объекты json из базы данных, а затем сравнить их с объектом json в руке ... есть ли другой способ ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...