Après avoir déployé l'application d'origine, je remarque que des données en double sont enregistrées.
En tant que spécification de l'application, je ne souhaite pas dupliquer les enregistrements enregistrés.
Quand je vérifie la base de données, Il s'avère que si l'utilisateur à enregistrer est différent, il sera possible de s'inscrire.
Cela a pris un certain temps à résoudre, je vais donc l'enregistrer comme un rappel.
La condition d'enregistrement des données a été définie dans le contrôleur.
require 'rubygems'
require 'mechanize'
def create
f = (params[:wiki_url])
unless
f.start_with?("https://ja.wikipedia.org/wiki/")
flash[:notice] = "Impossible d'enregistrer car une URL non valide a été saisie."
redirect_to action: 'new'
return
else
agent = Mechanize.new
page = agent.get(f)
page.encoding='utf-8'
Omis ci-dessous...
Dans l'instruction sauf, entrez "https://ja.wikipedia.org/wiki/" dans les données saisies (URL). Si n'est pas inclus, la condition a été définie de sorte qu'elle ne soit pas enregistrée.
Cependant, s'il y a des enregistrements en double, la condition selon laquelle ils ne sont pas enregistrés n'a pas été incluse. Les mêmes données que celles indiquées sur l'image ont été enregistrées.
Je l'ai réécrit comme suit et je l'ai résolu.
require 'rubygems'
require 'mechanize'
def create
f = (params[:wiki_url])
if not
f.start_with?("https://ja.wikipedia.org/wiki/")
flash[:notice] = "Impossible de s'inscrire car une URL non valide a été saisie."
redirect_to action: 'new'
return
elsif
Company.where(page_url: "#{f}").count >= 1
flash[:notice] = "Impossible de s'inscrire car l'URL enregistrée a été saisie."
redirect_to actiont: 'new'
return
else
agent = Mechanize.new
page = agent.get(f)
page.encoding = 'utf-8'
Omis ci-dessous...
L'article sur teratail a été utile et j'ai trouvé une solution. : point_right: Je veux obtenir un enregistrement dans lequel deux ou plusieurs données avec le même nom sont enregistrées en utilisant ActiveRecord.
Il y a deux changements majeurs.
-Changé de la déclaration sauf à la déclaration sinon
Il n'y a pas d'elsif dans le ruby, sauf instruction. .. .. C'est vrai.
Je souhaite ajouter une condition de prévention de duplication en plus de la condition de prévention d'entrée de données non valide. Cependant, comme elsif ne peut pas être utilisé dans les instructions sauf, Ajout de elsif au lieu de if not statement.
Le flux des conditions (traitement) est le suivant.
Vous pouvez obtenir des enregistrements qui remplissent les conditions avec .where ("condition").
Nom du modèle.where("conditions")
. Cette fois, nous obtiendrons la colonne page_url du modèle Company.
Company.where(page_url)
. De plus, je souhaite rechercher des données qui correspondent aux données saisies dans la colonne page_url. Ajoutez comme suit.
Company.where(page_url: "#{f}")
.
La variable f est définie à l'emplacement suivant, et le contenu est comme ceci.
require 'rubygems'
require 'mechanize'
def create
f = (params[:wiki_url]) <=C'est ici.
Omis ci-dessous...
. Pour déterminer combien ont été trouvés suite à une recherche dans la colonne page_url Ajoutez une méthode de comptage.
Company.where(page_url: "#{f}").count
Vérifiez s'il y en a 1 ou plus, c'est-à-dire comptez le nombre d'URL qui sont identiques aux données saisies.
Company.where(page_url: "#{f}").count >= 1
Cela se reflète dans l'application, alors jouez avec. Unsung:hero
Recommended Posts