[RUBY] [rails6.0.0] Comment enregistrer des images en utilisant Active Storage au format assistant

Aperçu

Créez un formulaire au format assistant lors de l'inscription et du profil. Je voulais enregistrer l'image dans mon profil, mais cela n'a pas fonctionné, alors je l'ai écrite sous forme de mémorandum.

Quel est le format de l'assistant? Ceux qui disent Veuillez consulter ici

Contenu

Environnement de développement

MacOS Catalina 10.15.6 Rails 6.0.0 Ruby 2.6.5

Structure de la table

J'essaie de m'inscrire en tant qu'utilisateur en utilisant un appareil. Seul le surnom est ajouté à la table des utilisateurs. La table de profil comprend un lien Twitter. Je souhaite enregistrer une image avec active_strage dans la table de profil.

Format de l'assistant implémenté

Concernant la mise en œuvre de ces fonctions Cet article est assez proche, alors j'y ai fait référence.

problème

Dans le format de l'assistant, j'ai pu tout enregistrer sauf l'image, mais l'image n'est pas enregistrée.

registrations_controller


class Users::RegistrationsController < Devise::RegistrationsController

  def create
    @user = User.new(sign_up_params)
    unless @user.valid?
      render :new and return
    end
    session["devise.regist_data"] = {user: @user.attributes}
    session["devise.regist_data"][:user]["password"] = params[:user][:password]
    @profile = @user.build_profile
    render :new_profile
  end

  def create_profile
    @user = User.new(session["devise.regist_data"]["user"])
    @profile = Profile.new(profile_params)
    unless @profile.valid?
      render :new_profile
    end
    @user.build_profile(@profile.attributes)
    @user.save
    session["devise.regist_data"]["user"].clear
    sign_in(:user, @user)
    redirect_to root_path
  end

  private

  def profile_params
    params.require(:profile).permit(:avatar, :favorite_beer, :twitter_link, :info)
  end

Il semble que la description suivante était mauvaise.

registrations_controller


@user.build_profile(@profile.attributes)
@user.save

Ici, @user et @profile sont associés à build et enregistrés avec @ user.save, mais il semble que cela ne fonctionne pas bien en raison de l'enregistrement ici. Trouvez cet article

Cause Le moment auquel le fichier est réellement enregistré dans Active Storage est celui où le modèle est enregistré et le processus est validé, donc même si vous attachez une image du modèle avant son enregistrement, le fichier semble être dans un état incomplet.

Il semble qu'Active Strage ne puisse pas fonctionner tant que vous n'avez pas enregistré correctement le modèle, je l'ai donc résolu en modifiant la description comme suit.

registrations_controller


#Enregistré dans chaque modèle
# @user.build_profile(@profile.attributes)
@user.save
@profile.user_id = @user.id
@profile.save

Résumé

Honnêtement, la cause de l'erreur peut être que je l'ai utilisé même si je ne comprenais pas comment enregistrer en utilisant build. J'espère que cela vous aidera.

Recommended Posts

[rails6.0.0] Comment enregistrer des images en utilisant Active Storage au format assistant
Comment lier des images à l'aide de FactoryBot Active Storage
[Rails] Comment utiliser Active Storage
[Rails] Comment télécharger des images à l'aide de Carrierwave
[Rails] Comment télécharger plusieurs images à l'aide de Carrierwave
[rails] Comment publier des images
[Rails] Enregistrez des images à l'aide de carrierwave
[Rails API + Vue] Télécharger et afficher des images à l'aide du stockage actif
Comment déployer jQuery dans les applications Rails à l'aide de Webpacker
Comment installer jQuery dans Rails 6
Comment installer Swiper in Rails
[Rails] Implémentation d'une nouvelle fonction d'enregistrement au format assistant à l'aide de devise
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3
Comment implémenter la fonctionnalité de recherche dans Rails
Comment changer le nom de l'application dans les rails
Comment insérer une vidéo dans Rails
Comment utiliser MySQL dans le didacticiel Rails
[rails] Comment configurer le routage dans les ressources
Rails Active Storage réduit les images avant le téléchargement
Comment implémenter la fonctionnalité de classement dans Rails
Pour implémenter la publication d'images à l'aide de rails
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
Comment mettre en œuvre un diaporama en utilisant Slick in Rails (un par un et plusieurs par un)
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
[Rails] Comment utiliser les boîtes de sélection dans Ransack
Comment traduire Rails en japonais en général
Comment enregistrer des images sur Heroku dans S3 sur AWS
Comment séparer .scss par contrôleur dans Rails
Comment ajouter conditionnellement une classe html.erb dans Rails
Comment implémenter une fonctionnalité similaire dans Rails
Comment créer facilement un pull-down avec des rails
Comment utiliser JQuery dans Rails 6 js.erb
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Comment vérifier les commandes Rails dans le terminal
Créez un éditeur de démarques par glisser-déposer dans Rails 6 (à l'aide d'Active Storage, SimpleMDE et Inline Attachment)
Comment régler l'heure d'affichage sur l'heure japonaise dans les rails
Comment implémenter la connexion invité en 5 minutes sur le portefeuille de rails
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
[Ruby on Rails] Comment écrire enum en japonais
Utiliser des images avec des rails
[rails] Comment publier des images
[Rails] Télécharger des vidéos avec Rails (ActiveStorage)
[Rails] Enregistrez des images à l'aide de carrierwave
Rails6 OmniAuth activestorage Obtenir l'image de l'utilisateur
[Comment insérer une vidéo dans un hameau avec Rails]
Comment désinstaller Rails
Comment supprimer des images non balisées en masse avec Docker
Comment écrire une recherche de comparaison de dates dans Rails
Utiliser des images avec des rails
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment télécharger des images depuis AWS S3 (rails, carrierwave)
Comment interroger Array dans jsonb avec Rails + postgres
[Rails 6] Comment définir une image d'arrière-plan dans Rails [CSS]
[Rails] Comment charger JavaScript dans une vue spécifique