Как сохранить ответ HTTParty на БД? (Обновление!) - PullRequest
0 голосов
/ 16 апреля 2019

Необходимо сохранить ответ httparty в БД и вызвать его в файле вида

вот что получает httrparty

enter

в папке служб /

 class ParserService
      include HTTParty
      API_KEY = '882e10dd2b474a23bb7a3efa85e66b61'.freeze
      base_uri 'https://newsapi.org/v2/'
      default_params fielsd: "title, description, ulr, content"
      format :json

      def self.top_headlines(country_name='us') 
        new(country_name).top_headlines
      end

      def initialize(country_name='us')
        @options = { query: { country: country_name, apiKey: API_KEY} }
      end

        def top_headlines 
          response = self.class.get("/top-headlines", @options)
          pars_json = response.parsed_response
          pars_json["articles"].each do |k|
            @source = ActiveModel::Source.create(google_id: k["id"], name: k["name"])

            @article = Article.create(title: k["title"], source_id: @source.id,
                                      description: k["description"], content: k["content"])

          end
        end  
    end

ArticleController

class ArticlesController < ApplicationController


    def index
        @articles = Article.all
    end
end

и модель

class Article < ApplicationRecord
    belongs_to :source, class_name: "Source", optional: true
    validates :title, presence: true
    validates :source_id, uniqueness: true 

end

и schema.rb

enter image description here

Это то, что я сделал сейчас если попытаться сохранить Статью в консоли (rails c), появится эта ошибка, проверка

enter image description here

при попытке комментирования проверки он сохраняет, но .... он сохраняет пустые поля

enter image description here

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

enter image description here

enter image description here

и в консоли позже появились ошибки

enter image description here

Я могу представить, как это исправить и что и где не так

1 Ответ

2 голосов
/ 16 апреля 2019

от того, на что это похоже мне:

pars_json.each do |k|
  art = ParserService.new('us')
  res = response.body
  art.title = res["title"]
  art.save
end

этот кусок, где вы пытаетесь сохранить его в БД? Я не думаю, что ParserService - это созданная вами модель, которая отражает таблицу из вашей БД.

если у вас есть модель Article, которую вы хотите использовать для сохранения каждого объекта, проанализированного из вызова API, вы захотите сделать что-то как таковое вместо вышеуказанного:

pars_json.each do |k|
  article = Article.create(title: k["title"], k["description"]...)
end

Попробуйте сначала распечатать, что такое k, и выровнять ключи объектов, чтобы они соответствовали полям Article.

Опять же, чтобы сохранить в БД, вам нужно использовать созданную вами модель, которая отражает таблицу в БД. если в вашей БД есть таблица articles, в которую вы хотите сохранить данные ответов API, то вам следует создать экземпляры Article и сохранить их.

Тогда в контроллере он просто вызывает его по @articles = Article.all или по любому запросу, который вы хотите выполнить, чтобы получить список статей.

Я бы порекомендовал запустить ParserService в фоновом задании, чтобы API извлекал данные в параллельном процессе, не влияя слишком сильно на процесс rails

...