Ceci est ma première question ici et je suis actuellement en train d'essayer de construire ma première application Ruby on Rails donc cette question pourrait être un peu basique.Comment faire pour transférer/router des demandes en fonction des conditions dans Rails 3?
Le problème:
Je veux un formulaire sur le site racine qui se compose de deux champs, e-mail et mot de passe pour un modèle utilisateur. Selon que l'adresse e-mail qui a été tapée existe déjà ou non, le formulaire doit transmettre la requête à l'utilisateur 'users # create' (c.-à-d. Créer un nouvel utilisateur) ou aux 'sessions # create'. . si le mot de passe est correct)
ce que j'ai essayé:
pour résoudre cela, je créé une nouvelle action dans le contrôleur de pages appelé « décider » et a souligné la forme à cette page.
Il ressemble fondamentalement ceci:
def decide
if User.find_by_email(params[:email])
# Copied in all of the code from sessions#create
# with a redirect at the end so a /decide page doesn't get rendered
else
# Copied in all of the code from users#create
# with a redirect at the end so a /decide page doesn't get rendered
end
end
-
Maintenant, cela fonctionne et je suis assez fier de moi-même que je pensais que ce comme un débutant, mais je peux entendre les programmeurs expérimentés criant à l'agonie à ce code. Je suis sûr que ce n'est pas le "Rails Way". Je répète une grande quantité de code et j'ai l'impression de mettre quelque chose dans un contrôleur qui n'a pas été créé à cet effet. Un autre problème est que je n'arrive pas à faire fonctionner mon test d'intégration rspec, qui va essentiellement au root_path, remplit le formulaire avec un nouvel utilisateur, appuie sur le bouton et s'attend à un flash réussi ... mais le test obtient un document html vide en appuyant sur le bouton. Bien que cela fonctionne parfaitement bien quand je fais la même chose dans un navigateur.
Alors je me suis:
ne pourriez-vous mettre en quelque sorte ce qui précède, si la déclaration dans le fichier routes.rb et rediriger la requête vers le contrôleur et l'action respective?
Si oui, comment?
Ou est-ce que quelqu'un a une idée différente comment accomplir cela?
Merci,
-Konstantin
En ce qui concerne votre problème RSpec, il peut être utile de poser une autre question avec plus de détails, par exemple: vos spécifications, plus de code, etc. –