如何从rails中的哈希数组中提取项



我们用于拉取新内容的rails代码如下所示;

def self.update_from_feed_continuously(feed_url)
puts "I am running"
@all_feeds = Feed.all
for @feed in @all_feeds
sleep 1.5
xml = HTTParty.get(@feed.url).body
@new_feed = Feedjira.parse(xml)
@entry = @new_feed.entries.take(4)
@items = Item.where("feed_id = ?", @feed.id)
i = 0
for @item in @items
@new_item = @entry[i]
@item.title = @new_item.title
@item.description = Nokogiri::HTML.parse(@new_item.summary).css('p').text.strip.truncate(200)
unless Nokogiri::HTML.parse(@new_item.content).css('img').nil?
@item.image = Nokogiri::HTML.parse(@new_item.content).css('img').attr("src")
end
@item.url = @new_item.url
@item.created_at = @new_item.published
@item.save
i = i + 1
end
end

结束

然而,在最近的更改中,我们在没有为@item.title定义title时遇到错误,我们知道它是因为它是@item@items返回的数组或哈希。

我们已经使用控制台尝试执行@item.title.first@item[0].title,这是有效的,但使用@item[i].title没有

我不太了解使用@feed的必要性。相反,使用each_with_index方法进行迭代怎么样?

这种方式将为您提供每个对象在数组中的位置。

示例

@all_feeds.each_with_index do |feed, feed_position_in_array_number|
puts feed
# will return the object
puts feed_position_in_array_number
# as example will return 4 that can help you for done something like @all_feeds[feed_position..] 
end

https://apidock.com/ruby/Enumerator/each_with_index

最新更新