Enregistrement paresseux avec routage reposant en rails
-
29-10-2019 - |
Question
Je suis coincé à trouver les meilleures pratiques ...
Je souhaite créer un système "suivant" d'une manière qu'un utilisateur peut suivre une voiture (obtenir des mises à jour par e-mail lorsque le prix de la voiture change, etc.). La partie de la mise en œuvre qui me donne des maux de tête, c'est quand je veux introduire l'inscription paresseuse en utilisant uniquement le courrier électronique.
Tout a besoin de travailler comme ajax demandes.
Dans l'interface, il y aura un bouton pour déclencher l'action de suivi, qui vérifiera si l'utilisateur est enregistré ou non. Si un utilisateur est connecté, créez un nouveau CarSubscription
Article, autrement afficher un formulaire où il pourrait taper son adresse e-mail. Une fois soumis, le formulaire doit créer un utilisateur sans mot de passe (si l'e-mail existe, demandez le mot de passe et se connectez-vous), puis il doit créer l'élément de relation.
Le défi ici est d'utiliser la redirection après la soumission du formulaire CREATE
action du CarSubscriptionController
. Puisque je ne peux pas rediriger en utilisant POST
Je ne peux pas simuler le CREATE
ou DESTROY
action.
La solution non re-rassure serait de créer 2 actions sous cars_controller
: Suivez et désabonnez et laissez-les faire la logique de créer des entrées et de les supprimer. Cela me permettrait de simplement stocker le chemin de la demande et de l'utiliser après que l'utilisateur entre dans leur e-mail et se connecte.
Comment puis-je réaliser ce que je veux utiliser des ressources reposantes?
Après avoir essayé de décrire mon problème ici, il semble que ce soit trop compliqué et je suis en effet très coincé ... il y a 3 contrôleurs différents et peut-être 4 demandes dans ce scénario.
Toute aide serait extrêmement appréciée!
Veuillez consulter mon organigramme ci-dessous:
La solution
Pas un expert ici, je ne sais pas si c'est la meilleure solution, mais ce que j'ai fait dans une situation similaire, c'est:
- Dans votre contrôleur, répondez avec JavaScript au lieu de rediriger l'utilisateur
- Dans votre fichier javascript, utilisez
$.post(...)
pour émettre unPOST
à votre action de contrôleur - Et voilà!
Vous pouvez également utiliser ActiveResource pour y parvenir, mais je n'ai jamais essayé cette solution: http://api.rubyonrails.org/classes/activesource/base.html#label-custom+rest+Methods
Person.new(:name => 'Ryan').post(:register)
J'espère que cela t'aides
Autres conseils
J'ai eu un besoin très similaire et j'ai eu du mal à tirer les différentes informations sur la façon de procéder avec Disget et Rails ensemble dans un exemple de travail. Voici un exemple entièrement fonctionnel basé sur Rails 4, Ruby 2 et Devise 3.0: