Ruby on rails Rails:Nokogiri问题,代码放在哪里。

Ruby on rails Rails:Nokogiri问题,代码放在哪里。,ruby-on-rails,ruby,nokogiri,Ruby On Rails,Ruby,Nokogiri,我有一个关于将Nokogiri应用到Rails应用程序的问题。我试图从一个网站收集棒球统计数据,并将数据显示到视图中。我成功地解析了数据,但是,我不确定在哪里以RESTful方式存储代码 目前,我正在收集统计数据,将它们放在一个数组中,然后将它们与另一个数组(按等级、团队、联盟等)进行匹配。然后将这两个数组放入散列中。有没有更有效的方法来实现这一点(如解析数据,然后将数据分配为哈希值,而将排名、团队、联盟等分配为哈希键) 最后,我把Nokogiri呼叫放到了我的控制器中,但我相信有更好的方法。R

我有一个关于将Nokogiri应用到Rails应用程序的问题。我试图从一个网站收集棒球统计数据,并将数据显示到视图中。我成功地解析了数据,但是,我不确定在哪里以RESTful方式存储代码

目前,我正在收集统计数据,将它们放在一个数组中,然后将它们与另一个数组(按等级、团队、联盟等)进行匹配。然后将这两个数组放入散列中。有没有更有效的方法来实现这一点(如解析数据,然后将数据分配为哈希值,而将排名、团队、联盟等分配为哈希键)

最后,我把Nokogiri呼叫放到了我的控制器中,但我相信有更好的方法。Ryan Bate的Railscapsts建议将Nokogiri调用放入rake任务(/lib/tasks/)。既然我希望网站每天都能收到新的棒球数据,我是否需要定期运行rake任务?其次,如何最好地将数据实现到视图中

在线搜索带来了将其放入配置/初始化器的想法,但我不确定这是否是一个更好的解决方案

以下是Nokogiri的电话:

task :fetch_mets => :environment do 
  require 'nokogiri' 
  require 'open-uri' 

    url = "http..." 
    doc = Nokogiri::html(open(url)) 

    x = Array.new
    doc.css('tr:nth-child(14) td').each do |stat|
      x << stat.content 
    end 

    a = %w[rank team league games_total games_won games_lost ratio streak] 
    o = Hash[a.zip x] 

    statistics = Hash[o.amp{|(y,z)| [y.to_sym, z]}] 

    @order_stat = statistics.each{|key, value| puts #{key} is #{value}."}
end 
task:fetch\u mets=>:environment do
需要“nokogiri”
需要“打开uri”
url=“http…”
doc=Nokogiri::html(打开(url))
x=Array.new
文件css('tr:nth child(14)td')。每个都做|统计|

x在数据库中创建一个名为statistics的表,并在散列中包含所有键(加上created_on和id)。要保存您的统计信息,请执行以下操作:

Statistic.new(statistics).save
然后在你看来,拉一个与最高的创造_上。 要在cron计划上运行rake任务,请参阅

此外,更干净的做法可能是:

keys = %w[rank team league games_total games_won games_lost ratio streak].map(&:to_sym)
values = doc.css('tr:nth-child(14) td').map(&:text)
statistics = Hash[keys.zip values]

非常感谢!这非常有帮助,尤其是干净的代码示例。