Rails Anemone и Postgres хранят только URL

Я хочу сохранить URL on_pages_like определенный матч. Анемон делает свое дело, и создаются записи, которые хранят URL-адреса, но:

  1. Я хочу использовать что-то вроде find_or_create_by_url вместо create!так что я не дублирую записи каждый раз.
  2. Я хочу сохранить URL. В настоящее время URL сохраняется в БД, например:

    ---! ruby ​​/object:URI:: Схема HTTP: http пользователь: пароль: хост: www.a4apps.com порт: 80 путь: /Websites/SampleCalendar/tabid/89/Default.aspx запрос: непрозрачный: реестр: фрагмент: parser:

Я хочу это так:

http://www.a4apps.com//Websites/SampleCalendar/tabid/89/Default.aspx

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

За последние несколько дней я пытался настроить основной код, но пока не нашел решения.

Это моя задача Rake:

namespace :db do
  desc "Fetch a4apps urls"
  task :fetch_a4apps => :environment do
    require 'anemone'
    Anemone.crawl("http://www.a4apps.com/") do |anemone|
      anemone.on_pages_like(/\/SampleCalendar\/[^?]*$/) do |page|
        Calendarparts.create!(:url => page.url)
      end
    end
  end
end

Мое представление не делает ничего, кроме вывода данных на веб-страницу:

<% @calendar.each do |part| %>
    <tr valign="top">...
             <td><%= part.url %>&nbsp;</td>...
    </tr>
<% end %>

Мой контроллер:

class CalendarController < ApplicationController
  def cainventory
    @calendar = Calendarparts.all
  end
end

1 ответ

Решение

Хорошо, так что я думаю, что я понял это. Не знаю, является ли это идеальным / правильным способом, но я вытаскиваю часть пути из URL и добавляю исходный домен к его началу.

namespace :db do
  desc "Fetch a4apps urls"
  task :fetch_a4apps => :environment do
    require 'anemone'
    website = 'http://www.a4apps.com'
    Anemone.crawl(website) do |anemone|
      anemone.on_pages_like(/\/SampleCalendar\/[^?]*$/) do |page|
        Calendarparts.find_or_create_by_url(:url => website + page.url.path)
      end
    end
  end
end
Другие вопросы по тегам