web-dev-qa-db-fra.com

Rails 4 rechercher ou créer par méthode ne fonctionne pas

J'ai une association un à plusieurs entre les emplois et les entreprises et cela fonctionne très bien. Dans la vue du formulaire de travail, j'ai text_field pour le nom de l'entreprise avec une fonction de saisie semi-automatique. La saisie semi-automatique fonctionne correctement, mais la fonction find_or_create_by ne crée pas de nouvelle société si je mets un nom de société qui n'existe pas dans la liste de saisie semi-automatique.

  def company_name
    company.try(:name)
  end

  def company_name=(name)
    @company = Company.find_or_create_by(name: name)
  end
52
userails

Veuillez consulter cette réponse .

Ce qui était

@company = Company.find_or_create_by_name(name)

dans Rails 4 est maintenant

@company = Company.find_or_create_by(name: name)

Une autre façon de le faire dans Rails 4 serait:

@company = Company.where(name: name).first_or_create
110
eronisko
Company.find_or_create_by(name: name)

Cela devrait fonctionner hors de la boîte. La seule chose qui peut l'empêcher de créer un enregistrement, ce sont les erreurs de validation.

Essayez ceci dans Rails console pour vérifier si cela fonctionne ou non. Et vérifiez également les erreurs de validation.

name = "YOUR TEXT FOR NAME ATTRIBUTE"
c = Company.find_or_create_by(name: name)
puts c.errors.full_messages
24
Kalpesh Fulpagare

Cette méthode est déconseillée dans Rails 4.

Message de sortie de Rails4:

Déconseillé l'API Finder basée sur le hachage à l'ancienne. Cela signifie que les méthodes qui acceptaient auparavant les "options du Finder" ne le font plus.

C'est une méthode obsolète, mais cela devrait fonctionner. Peut-être que Rails ne le supporte pas maintenant.

Vous pouvez obtenir plus d'informations cliquez ici et vérifiez 11.2 Deprecations.

0
uma