我正在尝试创建一个脚本,通过循环查找表中元素的所有实例。我可以识别一个对象,它的第一个实例:
b.table(id: "table_id").a.title
=> "foo bar"
但是当我试图遍历表格时,我遇到了问题:
def get_titles
titles = ""
b.table(id: "table_id").a.title.each do |title|
titles << title
end
puts titles
end
get_titles
NoMethodError: undefined method `each' for "foo bar":String
我认为我试图循环使用表格时出现了问题。
答案 0 :(得分:1)
你做错了。正确的方法是:
def get_titles
titles = ""
b.tables(id: "table_id").each do |table|
titles << table.a.title
end
puts titles
end
b.table(id: "table_id").a.title
为您提供了一个String
对象,并在此字符串对象上调用了#each
。这就是错误的原因。
根据Justin's评论,明确的方法是:
b.table(id: "table_id").links.map(&:title).join
答案 1 :(得分:0)
如对其他答案的评论所示,问题在于您尝试在单个对象上使用.each方法而不是某种形式的集合。
要从一些容器中获取包含所有标题的集合,请使用.titles方法
titles = b.tables(id: "table_id").titles
if you need something like a collection of all the text of the titles
b.tables(id: "table_id").titles.each do |title|
titles << title.text
end
你也可以使用贾斯汀在评论中给出的第一个答案