Ruby on rails Rails 4销毁操作,未定义的方法消息路径

Ruby on rails Rails 4销毁操作,未定义的方法消息路径,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,我对Rails销毁操作有问题。我有一个完整的信息系统。用户可以发送、阅读消息,但不能删除。 我的信息控制器是: class MessagesController < ApplicationController before_filter :set_user def index if params[:mailbox] == "sent" @messages = @user.sent_messages.page(params[:page]) elsif params[:

我对Rails销毁操作有问题。我有一个完整的信息系统。用户可以发送、阅读消息,但不能删除。 我的信息控制器是:

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
在视图中,我有要删除的链接(该链接不起作用):

单击此链接时,出现以下错误:

No route matches [DELETE] 
邮件的rake路由:

         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

有什么想法吗?:)

因为您使用了嵌套路由,所以需要在
link_中向
传递两个参数,即用户实例和消息实例。并显式写入命名路由

像这样:

= link_to "Delete Message", user_message_path(@user, @message), \
  method: :delete, data: {confirm: "You sure?"}

这是因为您正在对路由文件中的消息使用嵌套路由:

它将生成与用户关联的路由。因此,要么在链接中更改路径

= link_to "Delete Message", user_message_path(message.user, message), method: :delete, data: {confirm: "You sure?"}
或者

如果要删除没有用户对象的邮件,请为邮件定义单独的路由:

resources :messages 
现在,您将能够单独使用消息路由:

= link_to "Delete Message", message, method: :delete, data: {confirm: "You sure?"}

作为其嵌套路径,您还需要传递用户对象

= link_to "Delete Message", user_message_path(@message.user,@message), method: :delete, data: {confirm: "You sure?"}

您想要的是
message
而不是
@message
。要使delete方法工作,必须正确加载javascripts。在浏览器中查看firebug或chrome开发者工具控制台中的所有文件是否正确加载。你能粘贴你的
rake routes
命令输出吗?当我将@mesaage更改为message时,我有一个未定义的方法“message_path”错误。谢谢你的帮助,但现在我有一个相同的错误:没有路径匹配[DELETE]“/users/1-jan-kowalski/messages”@MateuszUrbański,生成的html正确吗?i、 e.带有方法DELETE的表单?当我使用:=链接到“删除消息”,用户消息路径(Message.user,Message),方法::删除,数据:{确认:“确定吗?”}我有未定义的方法
user'用于#错误。当我使用:=link_“Delete Message”时,user_Message_path(@Message.user,@Message),method::Delete,data:{确认:“确定吗?”}我有nil:NilClass的:undefined method
user'。WTF?@MateuszUrbański用户和消息之间没有关联。你能粘贴你的message.rb文件吗?关联是正常的,因为用户可以发送和读取消息,我为它编写测试,一切正常。message.rb:属于:发件人,class_name:'User',primary_key:'id',foreign_key:'sender_id'属于:recepient,class_name:'User',primary_key:'id',foreign_key:'recepient_id',在这种情况下,您可以使用message.sender而不是message.User。但更好的做法是为外部用户编写单独的消息路由,我在回答中的第二种方法中提到了这一点。
= link_to "Delete Message", message, method: :delete, data: {confirm: "You sure?"}
= link_to "Delete Message", user_message_path(@message.user,@message), method: :delete, data: {confirm: "You sure?"}