背景:我正在使用 rails 应用程序中的feedzirra 插件,并尝试在单个视图中同时使用已解析提要的提要和入口访问器。
为此,我创建了两个模型:feed 和 feed_entry。它们如下:
饲料.rb:
class Feed < ActiveRecord::Base
attr_accessible :title, :url, :feed_url, :last_modified, :guid
has_many :feed_entries
def self.update_from_feed(feed_url)
feed = Feedzirra::Feed.fetch_and_parse(feed_url)
add_feed(feed)
FeedEntry.add_entries(feed.entries)
end
private
def self.add_feed(feed)
unless exists? :guid => feed.id
create!(
:title => feed.title,
:url => feed.url,
:feed_url => feed.feed_url,
:last_modified => feed.last_modified,
:guid => feed.id
)
end
end
end
feed_entry.rb:
class FeedEntry < ActiveRecord::Base
attr_accessible :title, :url, :author, :summary, :content, :published, :guid
belongs_to :feed
def self.add_entries(entries)
entries.each do |entry|
unless exists? :guid => entry.id
create!(
:title => entry.title,
:url => entry.url,
:author => entry.author,
:summary => entry.summary,
:content => entry.content,
:published => entry.published,
:guid => entry.id
)
end
end
end
end
目的是将 Feed.update_from_feed(feed_url) 称为 cron 作业。实际上,我希望通过传入多个提要让 cron 作业调用此函数;但我想我会先让一个工作。为了测试,我目前正在从控制台调用此函数。
问题:
NoMethodError: undefined method `id' for #<Feedzirra::Parser::RSS:0x00000100bcb0f0>
这看起来很简单,但是在调用 update_from_feed 函数时,我在控制台中收到了上述错误。虽然是 ruby 和 rails 的新手,但我的印象是表中的每个新条目都有一个可以引用的 id - 在这种情况下,通过 feed.id。我在这里错过了什么吗?
我使用这个插件的 2 模型方法是一个好的方向吗?由于在我弄清楚问题 1 之前我无法验证我的方法的其余部分是否有效,因此我想我会同时要求提供有关最佳实践的提示。
我剩下的计划是在单个控制器中利用插件的 feed 和 entry 访问器,然后以某种方式在相对视图中引用这些变量。这就是我应该如何感知 MVC 架构并以 RESTful 方式使用它吗?如果是这样,我如何在 FeedReader 视图中引用提要和条目访问器?
这就是 FeedReader 控制器的样子:
class FeedEntriesController < ApplicationController
def index
@feed_entries = FeedEntry.all
@feeds = Feed.all
end
end
我知道这是一个婊子的帖子,但任何帮助都将不胜感激。