URL을 요청하는 양식이있는 작은 응용 프로그램을 RoR에 구축하고 있습니다. URL이 채워지고 제출 버튼이 눌러지면 URL을 가져 와서 제목이있는 db에 레코드를 만드는 웹 스크 레이 핑 플러그인 scrAPI (잘 작동 함)를 다운로드했습니다.도움이 필요합니다.
지금 당장 내 문제는 URL이 유효하고 scrAPI가 처리 할 수 있다면 모든 것을 작동시킬 수 있다는 것입니다. 입력 된 URL이 작동하지 않는다면 예상되는 "Scraper :: Reader :: HTTPInvalidURLError"를 제공하지만 모델에서의 지식은 올바른 방식으로 오류를 전달하지 못하게합니다.
컨트롤러 :
1) 제대로 스크레이퍼 :: 리더 :: 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
.
2) 모델에서 'uri'를 반환하고 컨트롤러 또는보기에서 사용할 수있는 방법을 알고 싶습니다.
3) 또한 모델에서 생성 된 기사의 ID를 반환하므로 컨트롤러에서 find (: last)를 사용하는 대신 악의적 인 동작처럼 사용할 수 있습니다.
당신은require 'scrapi'
에 begin
Article.getlink(@link)
# all your other code
rescue Scraper::Reader::HTTPInvalidURLError
render :text => "Invalid URI, says scrAPI"
rescue
render :text => "Something else horrible happened!"
end
해야합니다 다음과 같이
begin
# Code that may throw an exception
rescue Scraper::Reader::HTTPInvalidURLError
# Code to execute if Scraper::Reader::HTTPInvalidURLError is raised
rescue
# Code to execute if any other exception is raised
end
그래서 당신이 컨트롤러에서이 확인 할 수 다음과 같이
예외 처리 솔루션이 완벽하게 작동했습니다. – user647345