Ruby on rails Rake任务更新记录

Ruby on rails Rake任务更新记录,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在做一项rake任务,即为了寻找音乐会而放弃一个网站: lib/tasks/my_task.rake task :find_concerts => :environment do doc = Nokogiri::HTML(open(url)) data = doc.search('#dateconcert table') data = data.css('.jaunec' ).map { |tr| tr.css('td').map(&:text)

我正在做一项rake任务,即为了寻找音乐会而放弃一个网站:

lib/tasks/my_task.rake

  task :find_concerts  => :environment do

    doc = Nokogiri::HTML(open(url))
    data = doc.search('#dateconcert table')
    data = data.css('.jaunec' ).map { |tr| tr.css('td').map(&:text) } + doc.css('.jaunef' ).map { |tr| tr.css('td').map(&:text) }

    data.each do |concert|
      c = Concert.new
      c.date = concert[0]
      c.city = concert[1]
      c.save
    end
  end
我想要什么

我想在新的音乐会加入时得到一个提醒(在我正在取消的网站上),这样任务每天都会运行

我的问题

如果有新唱片,我想更新我的演唱会列表

在我编写的任务中,它会再次查找已存储的记录并复制这些记录。。。 我只想要能找到的新唱片

最后,我想比较最后两个任务之间的新内容,以便在发现新内容时发送警报

编辑

这是
数据
返回的内容

[
 ["03 Décembre 2017", "PONT L\u0092ABBE (29)  | Centre Culturel Le Triskell "],
 ["26 Janvier 2018", "MONTPELLIER (34)  | Le Jam "],
 ["17 Février 2018", "BLOIS (41)  | All That Jazz / Les Lobis "], 
 ["22 Mars 2018", "MOISSAC (82)  | Hall de Paris "],
 ["24 Mars 2018", "LAX (Baraqueville) (12)  | Festival Lax'N Blues LAX\u0092N "],
 ["08 Décembre 2017", "ECHANGE CULTUREL CAMEROUN (0)  | au 18 décembre 2017 - Organisation tournée MFR "],
 ["27 Janvier 2018", "LE THOR (84)  | Le Sonograf "],
 ["16 Mars 2018", "CHAUMONT (52)  | Le Nouveau Relax "],
 ["23 Mars 2018", "AUCH (32)  | Le Cri'Art "]
]

我不确定我是否正确地理解了你,但你需要做的是检查它是否存在,并以其他方式创建它

我会做这样的事情

  task :find_concerts  => :environment do

    doc = Nokogiri::HTML(open(url))
    data = doc.search('#dateconcert table')
    data = data.css('.jaunec' ).map { |tr| tr.css('td').map(&:text) } + doc.css('.jaunef' ).map { |tr| tr.css('td').map(&:text) }

    data.each do |concert|
      Concert.where(data: concert[0], city: concert[1]).first_or_create
    end
  end
现在,您只能在它不存在时创建它。然后,当你创建一个你可以设置一个钩子

class Concern
  after_create :send_notification

  def send_notification
    # send email here
  end
end

不过,我找到了一个可能需要重构的解决方案

所以我创建了两个任务

  • find_concerts
    将为第一次报废手动运行
  • 更新将每天运行的音乐会
任务

require "nokogiri"
require "open-uri"
require "date"
require "time"

 namespace :scrap do

  desc "This get MM concerts"

  url = "http://mountain-men.fr/concerts/"
  doc = Nokogiri::HTML(open(url))
  data = doc.search('#dateconcert table')
  data = data.css('.jaunec' ).map { |tr| tr.css('td').map(&:text) } + doc.css('.jaunef' ).map { |tr| tr.css('td').map(&:text) }

  task :find_concerts  => :environment do
    data.each do |concert|
      c = Concert.create
      c.date = concert[0]
      c.city = concert[1]
      c.save
    end   
  end

  task :update_concerts  => :environment do
    existing_date = Concert.all.map { |c| [c.date, c.city] }
    data.each do |concert|
      c = Concert.create
      c.date = concert[0]
      c.city = concert[1]
      c.save unless existing_date.include?([concert[0], concert[1]])
    end
    Concert.where(city: nil, date: nil).destroy_all
  end
 end

不清楚你在问什么我刚编辑了我和我的结果一样