Справочная информация: Я играю с плагином feedzirra в приложении rails, и я пытаюсь использовать как средства доступа к фиду, так и входные элементы проанализированного канала в одном представлении,
Для этого я создал две модели: feed и feed_entry.Они выглядят следующим образом:
feed.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, у меня сложилось впечатление, что каждой новой записи в таблице присваивается идентификатор, на который можно ссылаться - в этом сценарии - feed.id.Я что-то здесь упускаю?
Является ли мой двухмодельный подход к использованию этого плагина хорошим направлением?Поскольку я не могу проверить, работает ли остальная часть моего подхода, пока я не разгадаю вопрос 1, я подумал, что попрошу дать совет по наилучшей практике за это время.
Остальная часть моего плана - использовать средства доступа к входу и подаче плагина в одном контроллере, а затем как-то ссылаться на эти переменные в относительном представлении.Это то, как я должен воспринимать архитектуру MVC и использовать ее RESTful способом?Если да, то как мне ссылаться на средства доступа к каналу и записи в представлении FeedReader?
Вот как будет выглядеть контроллер FeedReader:
class FeedEntriesController < ApplicationController
def index
@feed_entries = FeedEntry.all
@feeds = Feed.all
end
end
Я знаюэто была сука поста, но любая помощь будет очень признательна.