尝试使用 Rails 从列表中删除邮件

Trying to Delete Message from List with Rails

所以我有一个用户可以提交的简单消息列表。我正在尝试为每条消息放置一个删除按钮(有效)。但是如您所见,here 如果您单击该按钮,您会收到关于完全不同操作的错误。我不完全确定我哪里出错了。我的猜测是我超出了控制器区域的深度。这是所有适用的文件。

Routes.rb:

Rails.application.routes.draw do
 root 'messages#index', as: :home
 get '/new' => 'messages#new', as: :edit
 resources :messages
 post '/new' => 'messages#create', as: :create
 delete 'messages/:id' => 'messages#destroy', as: :delete 

相关控制人:

class MessagesController < ApplicationController
    def index
        @messages=Message.all
    end
    def new
        @messages=Message.new
    end
    def destroy
        @messages=Message.find(params[:id])
        @messages.destroy
    end
    def create
        @messages = Message.new(message_params) 
            if @messages.save 
            redirect_to '/' 
                else 
            render 'new' 
            end
    end
    private
    def message_params
        params.require(:message).permit(:content, :subject)
    end

end

相关观点:

<div class="main">
    <div="messages">
        <%@messages.each do |t|%>
        <h2 class="subject"><%=t.subject%></h2>
        <p class="content"><%=t.content%></p>
        <%=link_to "Delete Message", delete_path(t)%>
        <% end %>
        <%=link_to "Create Message", edit_path%>
    </div>
</div>

您还需要传递方法 DELETE,否则它将执行简单的 GET 请求。方法如下:

<%=link_to "Delete Message", delete_path(t), :method => 'delete' %>

请记住,如果您在link_to中不提及任何method,则默认为GET。所以你必须明确其他 HTTP 方法。

编辑:

要么使用resources :messages,要么使用你自己写的路由。使用 resources :messages 更容易一些,这是首选方式。

使用resources :messages,你必须写成:

<%= link_to "Delete Message", t, :method => 'delete' %>

编辑 2:

您收到错误 Template is missing,因为在您的 destroy 方法中,您既没有 rendering 任何东西,也没有 redirect_toing 任何东西。在你 destroy 对象之后,你必须告诉它应该去哪里。例如,如果您希望用户在 he/she destroy 记录之后转到所有消息页面,则需要将以下行添加到方法的末尾:

redirect_to messages_path