背景:レール アプリでfeedzirra プラグインをいじっています。解析されたフィードのフィード アクセサーとエントリ アクセサーの両方を 1 つのビューで利用しようとしています。
これを実現するために、feed と feed_entry という 2 つのモデルを作成しました。それらは次のとおりです。
フィード.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 ジョブに複数のフィードを渡してこの関数を呼び出させることを望んでいます。しかし、私は最初に1つを機能させると考えました。テストのために、現在この関数をコンソールから呼び出しています。
質問:
NoMethodError: undefined method `id' for #<Feedzirra::Parser::RSS:0x00000100bcb0f0>
これは非常に単純に思えるかもしれませんが、 update_from_feed 関数を呼び出すと、コンソールに上記のエラーが表示されます。Ruby と Rails は初めてでしたが、テーブル内のすべての新しいエントリには、参照できる ID が与えられているという印象を受けました。このシナリオでは、feed.id によってです。ここで何か不足していますか?
このプラグインを使用するための私の 2 モデル アプローチは、良い方向に進んでいますか? 質問 1 を解決するまで、残りのアプローチが機能することを確認できないため、それまでの間、ベスト プラクティスに関するヒントを求めたいと思いました。
私の計画の残りの部分は、プラグインのフィード アクセサーとエントリ アクセサーを単一のコントローラー内で利用し、相対ビュー内でこれらの変数を参照することです。これは、MVC アーキテクチャを認識し、それを RESTful な方法で使用する方法ですか? その場合、FeedReader ビューでフィードとエントリのアクセサーを参照するにはどうすればよいですか?
FeedReader コントローラーは次のようになります。
class FeedEntriesController < ApplicationController
def index
@feed_entries = FeedEntry.all
@feeds = Feed.all
end
end
私はこれが投稿の雌犬だったことを知っていますが、どんな助けも本当に感謝しています.