2011-07-04 13 views
1

私がここでやろうとしているのは、sqlite dbs内の2つの文字列を比較しています。このプログラムの基本的な目的は、ユーザーがクロールするサイトをリクエストすることです。クローラは、サイトをジョブまたはリンクに分割します。私はruby​​とSqlite3 dbの文字列比較

if(request is already in jobs list) 
    { 
    do nothing 
    } 
else 
    { 
    Anemone.crawl(....) 

アネモネの方法により、ルビーのためのWebスパイダーフレームワークであると言って、重複クロールや要望を避けるためにしようとしています。

if文の比較は次のようになります。

if(@[email protected]_s) 

     puts 'TEST TEST TEST' 
     puts 'Request is already detected in job list' 

@allJobsと@allRequestsは両方だけを選択している* Jobs.Requests

@allJobs = Job.all 
@allRequests = Request.all 

から比較が失敗しているように見える、それは重複には問題を作成しません。誰にもアイデアはありますか?


.all変数からフィールドを削除する方法

allJobs.drop "where url = myurl.com"?

答えて

0

これは冒険でした。同じ問題を抱えている誰かのために。次の手順に従ってください。

オブジェクトを持っている場合は、YAMLを行うには、

puts YAML::dump(@requestToUpdate) 
puts YAML::dump(@jobToCompare) 

をダンプし、そのnilでないことを確認してください。これが最初の大きなヒントでした。 jobToCompareが完了していない間は、requestToUpdateに完全に値が設定されました。

@requestToUpdate = Request.find_by_url(@usersRequestedSite) 
@jobToCompare = Job.find_by_url("http://"[email protected]+"/") 

urlはの単なる文字列paramです:

は約sloothingのビットの後、私はそれらの2つのオブジェクトが

@Object.first.url 

ではなく、何であったかを指定するためのより良い方法はと交換していたことがわかりました私のオブジェクトと交換することができます何か他の。追加されたhttpと/は、一致する文字列の違いを示します。

その後、それは同じよう

else if (("http://"[email protected]+"/").eql? @jobToCompare.url) 

出来上がりに文字列を比較するだけの問題でした。私は最初の文字列の比較をしました。私は初めてのことを決して忘れません。 :£