【发布时间】:2011-03-06 22:34:12
【问题描述】:
我正在 RoR 中构建一个小型应用程序,它有一个请求 URL 的表单。填写完 URL 并按下提交按钮后,我下载了一个网络抓取插件 scrAPI(工作正常),它获取 URL 并在 db 中创建带有标题的记录。
我现在的问题是,如果 URL 有效并且 scrAPI 能够处理它,我就能够使整个工作正常进行。如果输入的 URL 不起作用,它会给出预期的“Scraper::Reader::HTTPInvalidURLError”,但我对模型工作的了解使我无法以正确的方式处理该错误。
控制器:
#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) 另外,我想返回在模型中创建的文章的 ID,以便我可以在控制器中使用它,而不是执行 find(:last),这似乎是一种不好的做法。
【问题讨论】:
标签: ruby-on-rails exception-handling model web-scraping