Je suis totalement déçu de ce que je fais de mal avec le code suivant. J'essaie d'implémenter un système de messagerie au sein de mon application, mais je veux qu'il gère différents types de messages. Dans ce cas, je veux créer un message "request" de ': message_type => 1'. Au lieu d'utiliser des formulaires comme je le fais habituellement, je veux faire de cette instance le moment où le lien est cliqué. Voici comment je l'ai mis en place dans le fichier erb show pour « utilisateur »:Ruby on Rails: l'utilisation du nom de la méthode 'request' dans le contrôleur échoue
<%=link_to "Send friend request", :action=>"request", :controller => "messages", :id => @user.id %>
et dans le contrôleur:
def request
@message = Message.new(:sender_id => current_user.id,:user_id => params[:id],:message_type => 1)
if @message.save
flash[:notice] = 'Message was successfully created.'
redirect_to message_path(@message)
else
redirect_to message_path(@message)
end
end
Il en résulte dans le message d'erreur suivant: méthode non définie rewrite »pour nul: NilClass avec la trace ressemblant
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in `method_missing'
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/base.rb:634:in `url_for'
(eval):16:in `message_path'
app/controllers/messages_controller.rb:11:in `request'
J'ai utilisé map.resources: messages dans le fichier routes.rb, et fait le cas: has_ many and: belongs_to associations dans les modèles d'utilisateur et de message. EDIT: Une autre chose à noter est que la sauvegarde EST réussie, car une fois que l'adresse racine est entrée manuellement dans la barre d'adresse, l'avis "flash" indique que la sauvegarde a été faite. En utilisant la console de développement, il est effectivement là, donc il y a quelque chose de fâché avec la redirection.
Wow . Je vous remercie.C'était une épreuve très frustrante. J'aimerais que ces messages d'erreur soient un peu plus descriptifs. C'est plutôt malchanceux – JackCA
Ce bloc "else" est toujours un bug qui attend de se produire, comme je l'ai souligné dans ma réponse. Je suis content que vous ayez résolu votre problème immédiat. – jdl
Oui, je viens de changer les deux rediriger vers "redirect_to: retour" mais merci! – JackCA