Я ищу, чтобы извлекать статьи из RSS через мое приложение rails. У меня есть веб-страница с кнопкой, которая выполняет очистку этих статей. Существует модель User и Article, и я определил контроллер для очистки этих статей. Этот контроллер скремблирования должен извлекать значения из RSS-канала и передавать значения в контроллер статьи.Контроль прохождения от одного контроллера к другому контроллеру
Я новичок в рельсах и не уверен, как выполнить эту операцию. Ниже приводится то, что я сделал до сих пор.
class ArticlesController < ApplicationController
def create
@article = Article.new(article_params)
@article.user = current_user
respond_to do |format|
if @article.save
format.html { redirect_to rss_importer_path }
format.json { render :show, status: :created, location: @article }
else
format.html { render :new }
format.json { render json: @article.errors, status: :unprocessable_entity }
end
end
end
private
def set_article
@article = Article.find(params[:id])
end
def article_params
params.require(:article).permit(:author, :title, :summary, :url, :date, :image, :user_id)
end
end
class RssImportersController < ApplicationController
def scrape
url = 'http://tviview.abc.net.au/rss/category/abc1.xml'
open(url) do |rss|
feed = RSS::Parser.parse(rss)
feed.items.each do |item|
article_path(author => nil, title => item.title, summary => item.description,
source => item.link, date => item.pubDate, image => nil)
end
end
end
end
В routes.rb -
resources :rss_importers
Это моя точка зрения -
<div class="btn-group pull-left" role="group">
<%= link_to 'Scrape Articles', rss_importer_path ,class: "btn btn-default" %>
</div>
<br> <br>
<h1>All Articles</h1>
<% @articles.each do |article| %>
<%= render partial: 'index_article', locals: {article: article} %>
<% end %>
Кажется, это классный Том. Я искал царапины из нескольких RSS-каналов, а также json. Не могли бы вы рекомендовать мне подход к дизайну, если я последую за сервисным подходом? Я не уверен в этом в рельсах. – coder05
Я не уверен, что смогу помочь с этим из-за ограниченного понимания того, что вы пытаетесь выполнить. Тем не менее, сообщение в блоге, которое я связал, было очень полезно для меня при разработке этих типов функций. В зависимости от того, что вы пытаетесь сделать и насколько усложняется каждый канал json feed/RSS, вы можете просто создать сервис для каждого, чтобы вы могли называть их независимо друг от друга. Вы также можете создать родительский класс для этих служб, который вызывает их всех или решает, какой из них вызывать на основе предоставленных параметров. –
Не могу ли я объединить список статей внутри метода scrape и передать список статей для создания метода статьи, который сохраняет его в виде массива статей? В этом случае мне не нужен сервис. – coder05