Я создаю небольшое приложение в RoR, в котором есть форма для запроса URL. После того, как URL был заполнен и нажата кнопка отправки, я скачал плагин для очистки веб-страниц scrAPI (который работает нормально), который получает URL и создает запись в db с заголовком.
Моя проблема сейчас заключается в том, что я могу заставить все это работать, если URL действителен и scrAPI может его обработать. Если введенный URL-адрес не работает, он выдает «Scraper :: Reader :: HTTPInvalidURLError», что ожидается, но мои знания по работе с Model не позволяют мне правильно обрабатывать эту ошибку.
Контроллер:
#controller
class ArticleController < ApplicationController
def savearticle
@newarticle = params[:newarticle]
@link = @newarticle["link"]
@id = @newarticle["id"]
Article.getlink(@link)
success = Article.find(:last).update_attributes( params[:newarticle] )
if success
render :partial => 'home/articlesuccess'
else
render :partial => 'home/articlebad'
end
end
end
# model
require 'scrapi'
class Article < ActiveRecord::Base
attr_accessor :getlink
def self.getlink(link)
scraper = Scraper.define do
process "title", :title => :text
result :title
end
uri = URI.parse(link)
Article.create(:title => scraper.scrape(uri))
end
end
Как:
1) Правильно обработайте Scraper :: Reader :: HTTPInvalidURLError, чтобы текст мог быть возвращен для просмотра с соответствующей ошибкой.
2) Я также хотел бы знать, как я могу вернуть 'uri' из модели и использовать его в контроллере или представлении.
3) Кроме того, я хотел бы вернуть идентификатор статьи, созданной в модели, чтобы я мог использовать ее в контроллере вместо выполнения поиска (: last), что кажется плохой практикой.