Ruby on rails Rails 4销毁操作,未定义的方法消息路径
我对Rails销毁操作有问题。我有一个完整的信息系统。用户可以发送、阅读消息,但不能删除。 我的信息控制器是: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[:
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?"}