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