ruby

【Ruby on rails】undefined method sliceと出たときにやったこと

railsでsliceメソッドを使おうとして、

undefined method `slice!’

こちらのエラーを何度も見て、どうしたら良いかわからない。。

そんな人(過去の自分)に向けて、エラーを抜け出し、sliceを活用でき流ようになったまでの流れを書きました。

railsでsliceのエラーから抜けられない..

railsでスクレイピングした文字列にsliceを使うために以下のコードを記述しました。

※srcの中身の一文字目だけ削除したいのです。

sliceエラー

こちらのコードで実行してみると

sliceエラー

こんな感じでエラーが出てきて、このエラーから抜けられずにいたのですが、ようやく解決できたので、メモとして残しておきます。

まずはnokogiriに切り替え

Mechanizeを使用したスクレイピングにおいてsliceのエラーを解消しようとしても、なかなか情報がネットになかったのです。。

そこで、ライブラリをMechanizeからNokogiriに変えました。

(Mechanizeの方が記述が楽だと思っていたため、Nokogiriに切り替えるのを2日ほど面倒くさがりました。。しかしこれは本当に時間の無駄だった。。)

Nokogiriに切り替えたもののエラーが続く。。

nokogiriでsliceエラー

Nokogiriの記述にはすぐに慣れました。

しかしエラーは続く。。

nokogiriでsliceエラー

Did you mean?  slice_when

と出てきていますが、、

「slice_when」ではない。。!

エラーの内容を見てみると、どうやらNokogiri、XML、Attrと出てきています。

とりあえず現状、XMLではなくHTMLをパースしているため、XMLでパースさせてみよう。となりました。

XMLのパースに修正して記述したら成功!

nokogiriでslice成功

※コードは以下の通り

require ‘nokogiri’
f = File.open(“rank_media.html.erb”)
xml_doc = Nokogiri::XML(f)
f.close()
xml_doc.xpath(“//ul[@class=’clearfix’]/li/a/img”).each do |xpath_node|
str = xpath_node.get_attribute(:src)
str.slice!(0)
str1 = (‘https://rank1-media.com’ + str)
puts str1
end

上記が、XMLのパースに修正して記述し直したものです。

こちらで実行したら、無事成功しました!

ABOUT ME
Ryo
【複業家】会社員をしながら、web関連の事業を個人で行っています。SEOコンサル、Lステップ構築、ボイスパーカッション講師。