Rails 4 - 更新活动记录条目如果与源相比存在更改?

时间:2013-11-19 08:00:59

标签: ruby-on-rails ruby rss feedzirra

基本上我有一个博客类型的应用程序,可以使用rss源代码创建帖子,我正在使用feedzirra gem:

def self.update_from_feed

    feed_url = ENV['FEED_URL']
    feed = Feedzirra::Feed.fetch_and_parse(feed_url)
    add_entries(feed.entries)

end

因此,我的post模型中的一个方法处理从解析的feed创建一个新帖子,看起来像这样:

def self.add_entries(entries)
    entries.each do |entry|
      unless exists? :guid => entry.id
      create!(guid: entry.id, name: entry.title, author: entry.author, summary: entry.summary, published_at: entry.published)
    end
  end

Feedzirra还有一个可用的更新方法(我试图实现但无法使其工作),它可以检查提要中的更改,如果存在更改,它将下载更改根据需要提供并创建新帖子。正如您在上面的方法中所看到的,如果已经创建了一个帖子(使用guid确定),那么使用unless exists?与源相比,它会跳过它并且不会进行任何更改。

但是,在博客类型的应用程序中,理想情况下它不会检查是否存在,检查它是否发生了变化(即:summary部分是我所追求的),也许使用{{ 1}}访问者然后更新已创建的记录。有没有类似于last_modified的东西,我可以使用它来更新这样的条目/我是在正确的轨道上还是我需要深入挖掘?

1 个答案:

答案 0 :(得分:1)

您可以尝试changed?

理念如下(对于现有记录):设置属性而不保存,并检查是否entry.changed?