Ruby on rails 如何在RubyonRails中避免数据库中的重复数据
我已经从另一个网站上删除了一个数据,并将其保存在我的数据库中,该数据库工作正常。然而,每当我刷新我的应用程序时,废弃的数据就会在我的数据库中复制。任何帮助都将不胜感激。下面是我的代码Ruby on rails 如何在RubyonRails中避免数据库中的重复数据,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我已经从另一个网站上删除了一个数据,并将其保存在我的数据库中,该数据库工作正常。然而,每当我刷新我的应用程序时,废弃的数据就会在我的数据库中复制。任何帮助都将不胜感激。下面是我的代码 require 'open-uri' require 'nokogiri' doc = Nokogiri::HTML(open("www.example.com")) entries = doc.css('.block') @entriesArray = [] entries.each do |row| S
require 'open-uri'
require 'nokogiri'
doc = Nokogiri::HTML(open("www.example.com"))
entries = doc.css('.block')
@entriesArray = []
entries.each do |row|
Scrap.create!(
title: title = row.css('h2>a').text,
link: link = row.css('a')[0]['href'],
day: days =row.css('time').text)
@entriesArray << Entry.new(title,link,days)
end
需要“打开uri”
需要“nokogiri”
doc=Nokogiri::HTML(打开(“www.example.com”))
条目=doc.css(“.block”)
@entriesArray=[]
条目。每个do |行|
废品,创造!(
title:title=row.css('h2>a')。文本,
link:link=row.css('a')[0]['href'],
day:days=row.css('time')。文本)
@entriesArray您应该在数据库的链接
列上添加一个uniq索引(这是为了优化find_by,并强制执行,您不会有重复的链接,虽然这是有意义的),因为它们是唯一的(你也可以选择标题,但他们可以重复自己的内容?-不确定,这取决于你要拍什么)
然后检查数据库中是否已经有该链接,如下所示:
entries.each do |row|
scrap = Scrap.create_with(title: row.css('h2>a').text, day: row.css('time').text).find_or_initialize_by(link: row.css('a')[0]['href'])
@entriesArray << Entry.new(title,link,days) if scrap.new_record? && (scrap.save! if scrap.new_record?)
end
entries.each do|行|
报废=报废。使用(标题:row.css('h2>a')。文本,日期:row.css('time')。文本)创建。\u。通过(链接:row.css('a')[0]['href'])查找或初始化\u
@entriesArray您希望向报废模型添加唯一性验证器,如下所示:
validates :title, uniqueness: true
validates :link, uniqueness: true
这将防止同一记录保存两次。如果任何验证失败,您可以使用模型
验证在创建!
上引发错误
class Scrap < ApplicationRecord
validates_uniqueness_of :title
end
您是否考虑过数据库中的唯一性验证和唯一索引?
entries.each do |row|
title = row.css('h2>a').text
link = row.css('a')[0]['href']
day = row.css('time').text
Scrap.where(title: title).first_or_create(
title: title,
link: link,
day: day
)
@entriesArray << Entry.new(title,link,days)
end