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

Ruby on rails 如何从rails中的哈希数组中提取项,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails 5,我们获取新内容的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.en

我们获取新内容的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
返回了一个数组或散列


我们使用console尝试执行
@item.title。首先是
@item[0]。title
有效,但使用
@item[i]。title
没有我不太了解使用@feed的必要性。相反,使用
each\u with\u 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

事实上纠正了这一点,我们需要将
@new_item.title
存储到
@item.title
中,但是,如果
@item.title
和title是在@item的散列中,我想不出怎么做。您是否尝试过
@item[:title]
@item['title']
?顺便说一句,这个代码是非常非rubysh。对于枚举数,您通常会执行类似于
Feed.all.each do | Feed |
的操作。跳过所有
i=0
i=i+1
的东西。嗨@jvillian,是的,我们已经尝试了这两种方法,在控制台中我们可以拉东西,但在实际代码中它是未定义的。我也知道这只是代码中的一个额外部分,它是由几个月前我们放弃的人开发的。代码在几天前运行了查询,所以不确定是怎么回事。我觉得我们需要更多具体的信息。出现问题时,
@item
的类和属性是什么?你的代码,在不经意的观察下,看起来还行(即使不是红色的)。你的问题的标题是错误的。考虑到
NoMethodError
,你的问题应该是“如何从nil对象中提取标题?”答案是,“你不能,因为它是nil对象。”所以,你的问题应该是,“为什么我的对象是nil?”一些有重点的调试应该可以让您了解这一点。虽然指向
each_with_index
方法的指针是好的和有价值的,但它不能回答OPs问题。