Rails 4 détruire l'action, undefined_method message_path
J'ai un problème avec les Rails de détruire l'action. J'ai pleinement de travail, système de message. L'utilisateur peut envoyer, lire les messages, mais ne pouvez pas le supprimer.
Mon Message est un Contrôleur:
class MessagesController < ApplicationController
before_filter :set_user
def index
if params[:mailbox] == "sent"
@messages = @user.sent_messages.page(params[:page])
elsif params[:mailbox] == "inbox"
@messages = @user.received_messages.page(params[:page])
end
end
def new
@message = Message.new
@reply_to = User.find_by_id(params[:reply_to])
unless @reply_to.nil?
@message.recepient_id = @reply_to.id
end
end
def create
@message = Message.new(message_params)
@message.sender_id = @user.id
if @message.save
flash[:notice] = "Message has been sent"
redirect_to user_messages_path(current_user, :mailbox=>:inbox)
else
render :action => :new
end
end
def show
@message = Message.readingmessage(params[:id],@user.id)
end
def destroy
@message = Message.find(params[:id])
@message.destroy
end
private
def message_params
params.require(:message).permit(:sender_id, :recepient_id, :body, :subject, :read_at)
end
def set_user
@user = current_user
end
end
Mes Itinéraires sont:
resources :users do
resources :messages
end
Dans la vue j'ai le lien pour supprimer(ce qui n'est pas de travail):
%h2 Your Inbox
- if @messages.size == 0
%h1 No messages in your Inbox
- else
%table.table.table-bordered
%tr
%th Subject
%th Sender
%th Sent At
- for message in @messages
%tr
%td
- if message.read?
= link_to h(message.subject), user_message_path(@user, message)
- else
= link_to "#{h(message.subject)} (unread)", user_message_path(@user, message)
%td= "#{message.sender.name}"
= link_to "Delete Message", @message, method: :delete, data: {confirm: "You sure?"}
Lorsque je clique Sur ce lien, j'ai l'erreur suivante:
No route matches [DELETE]
râteau itinéraires pour les Messages:
user_messages GET /users/:user_id/messages(.:format) messages#index
POST /users/:user_id/messages(.:format) messages#create
new_user_message GET /users/:user_id/messages/new(.:format) messages#new
edit_user_message GET /users/:user_id/messages/:id/edit(.:format) messages#edit
user_message GET /users/:user_id/messages/:id(.:format) messages#show
PATCH /users/:user_id/messages/:id(.:format) messages#update
PUT /users/:user_id/messages/:id(.:format) messages#update
DELETE /users/:user_id/messages/:id(.:format) messages#destroy
Des idées? 🙂
- Vous souhaitez
message
au lieu de@message
. - pour faire supprimer la méthode de travail, vous devez avoir le javascript charger correctement. voir dans votre navigateur que dans firebug ou chrome, les développeurs d'outils de la console que tous les fichiers sont chargés correctement. Et pourriez-vous collez votre
rake routes
de sortie de la commande? - Quand je change de @mesaage de message que j'ai le undefined method `message_path' erreur.
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous êtes en utilisant des parcours pour les messages dans le fichier de routes:
Il va générer des itinéraires en association avec l'utilisateur. Donc soit changer votre chemin en lien
Ou,
définir une autre route pour les messages si vous voulez supprimer les messages sans objet utilisateur:
maintenant, u sera en mesure d'utiliser les itinéraires des messages individuellement:
user' for #<Message:0x007f72c4cedf90> error. When I use: = link_to "Delete Message", user_message_path(@message.user,@message), method: :delete, data: {confirm: "You sure?"} i have the :undefined method
utilisateur pour nil:NilClass. WTF?Parce que vous avez utilisé imbriquée routes, vous avez besoin de passer deux arguments en
link_to
, c'est à dire à la fois l'utilisateur d'instance et d'instance de message. Et écrire la route nommée explicitement.Comme ceci:
comme il est imbriqué chemin, vous avez besoin pour passer de l'utilisateur de l'objet ainsi..