希望你能帮助我解决我无法找到答案的问题。 我有这个应用程序,并试图检索&更新DB中的记录值。
我在rails应用程序中的rake命令如下所示:
task :nokogiri => :environment do
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::XML(open(url))
data = doc.at_css(".lister-list")
movies = data.css('.titleColumn')
current_time = Time.now.strftime("%d/%m/%Y %H:%M")
movies.each do |movie|
headline = movie.text.strip
found = Movie.where("title" => headline).first
if found.nil?
title = Movie.new
title._id = BSON::ObjectId.new
title.title = headline
title.current_time = current_time.to_s
title.save
puts "Record created"
else
# arr = found.to_a.to_json
# puts arr.title
puts found.title
puts "Record exist"
end
end
end
问题是我可以输出" arr"对象控制台,但我无法检查标题字段。我一直在说:
rake aborted!
NoMethodError: undefined method `title' for #<String:0x007f68589d93e8>
我在这里做错了什么?我如何用current_time更新记录?
P.S。我是新手,所以你的帮助对我很有帮助,你是最后一个可以帮助我的人。
谢谢!
编辑:答案很简单,功能在哪里,我们必须限制结果并将其设为 .first 。然后我们可以像往常一样获取对象值 found.title
答案 0 :(得分:1)
在else
分支中,您这样说:
arr = found.to_a.to_json
to_json
返回String
。然后你说:
puts arr.title
但没有String#title
方法,因此您获得了NoMethodError
。也许你的意思是说:
puts found.title
另外,你真的想说found.to_a.to_json
而不是found.to_json
吗? to_a
调用只会将found
包装在单个元素数组中。