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

时间:2015-06-19 04:47:15

标签: ruby-on-rails model-view-controller routes

所以我有一个用户可以提交的简单消息列表。我试图为每条消息添加一个删除按钮(有效)。但正如您可以看到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>

1 个答案:

答案 0 :(得分:2)

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

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

请注意,如果您未在method中提及任何link_to,则默认设置为GET。所以你必须明确其他HTTP方法。

修改

使用resources :messages,或使用您自己编写的路线。使用resources :messages会更容易一些,这是首选方式。

使用resources :messages,您必须写:

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

编辑2:

您收到错误Template is missing,因为在destroy方法中,您既不render任何东西,也不redirect_to任何东西。在你destroy对象之后,你将不得不告诉它应该去哪里。就像您希望用户在他/她destroy记录之后转到所有消息页面一样,您需要在方法的末尾添加以下行:

redirect_to messages_path