Привет, я пытаюсь проанализировать XML из API веб-сайтов с Nokogiri. Мне просто интересно посмотреть, нахожусь ли я на правильном пути. У меня есть контроллер, который выполняет синтаксический анализ, и затем я хотел бы, чтобы модель инициализировала необходимые параметры и затем отобразила его в виде простого списка в представлении. Я думал что-то вроде этого в контроллере:
def index
doc = Nokogiri::XML(open("http://www.mysomething.com/partner/api/1_0/somerandomkeynumber4b0/channel/11number/material/list/").read)
@news = []
doc.css("news").each do |n|
header = n.css("header").text
source_name = n.css("source_name").text
summary = n.css("summary").text
url = i.css("url").text
created_at = i.css("created_at").text
type_of_media = i.css("type_of_media").text
@news << News.new(
:header => header,)
end
, а затем модель:
class News
include ActiveModel::Validations
validates_presence_of :url, :type_of_media
attr_accessor :header, :source_name, :summary, :url, :created_at, :type_of_media
def initialize(attributes = {})
@header = attributes[:header]
@source_name = attributes[:source_name]
@summary = attributes[:summary]
@url = attributes[:url]
@created_at = attributes[:created_at]
@type_of_media = attributes[:type_of_media]
end
Так ты это сделал? Не уверен, что я думаю об этом правильно. Может быть, у вас есть какие-нибудь советы о том, как объединить Nokogiri с другими вещами для просмотра, такими как карты Google или что-то еще. Прямо сейчас я получаю сообщение об ошибке
Missing template news/index with {:formats=>[:html], :handlers=>[:builder, :rjs, :erb, :rhtml, :rxml], :locale=>[:en, :en]} in view paths
Заранее спасибо!
@ лапша: Так вот:
@news = doc.css('query').map do |n|
h = {}
%w(header source_name summary url created_at type_of_media).each do |key|
h[key.to_sym] = n.css(key).text
end
News.new(h)
end
равно:
@news = []
doc.css("news").each do |n|
header = n.css("header").text
source_name = n.css("source_name").text
summary = n.css("summary").text
url = i.css("url").text
created_at = i.css("created_at").text
type_of_media = i.css("type_of_media").text
@news << News.new(
:header => header,)
end
Я правильно вас понял ?! Что касается шаблона, я обнаружил проблему. Это было незначительное опечатка. Ура!