Неинициализированная константа Ruby Job (NameError) Очистка и добавление в базу данных - PullRequest
0 голосов
/ 31 октября 2018

Я создаю скребок с Nokogiri и Ruby on Rails. Моя цель - вычистить работу с определенной веб-страницы. Я создал следующий код, который приводит к массиву названий должностей. Так что это отлично работает.

Моя проблема сейчас в том, что я хочу добавить эти названия в свою базу данных вакансий. Когда я набираю Vacancy.create(companyname=jobs[0]), он должен создать Vacancy с первым названием в массиве.

Но вместо этого выдает ошибку:

app / services / job_service.rb: 18: in `': неинициализированная константа Вакансия (NameError)

Похоже, он не знает класс Vacancy. Поэтому мне понадобился файл vacancy.rb:

require_relative(../models/vacancy.rb')

Но тогда это дает мне еще одну ошибку:

неинициализированная константа ApplicationRecord (NameError)

Так что теперь я думаю, что я делаю что-то в корне неправильно здесь. Я помещаю весь файл скребка в неправильную папку (я должен вероятно поместить это в папку граблей) ?. Все, что я хочу, - это выполнить что-то вроде Vacancy.create, чтобы оно добавилось в мою базу данных вакансий (или Джобс).

Вот скребок (job_service.rb):

require 'open-uri'
require 'nokogiri'

url = "https://www.savedroid.com/#karriere-section"

html_file = open(url).read
html_doc = Nokogiri::HTML(html_file)
jobs = []
html_doc.search('.job').each do |element|
  jobs << element.text.strip
end


Vacancy.create(companyname=jobs[0])

1 Ответ

0 голосов
/ 31 октября 2018

убедитесь, что модель создана и в таблице есть необходимые поля

давайте поместим ваш код парсера в сервисы rails:

class Jobs
  def self.jobs
    return @jobs if @jobs

    require 'open-uri'
    require 'nokogiri'

    url = "https://www.savedroid.com/#karriere-section"

    html_file = open(url).read
    html_doc = Nokogiri::HTML(html_file)
    jobs = []

    html_doc.search('.job').each do |element|
      jobs << element.text.strip
    end

    @jobs = jobs
  end
end

тогда вы можете вызвать его внутри контроллера рельсов:

VacancyController < ApplicationController
  def create
    Jobs.jobs.each do |job|
      Vacancy.create(companyname: job)
    end
  end
end
...