尝试使用 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
方法中,您既没有 render
ing 任何东西,也没有 redirect_to
ing 任何东西。在你 destroy
对象之后,你必须告诉它应该去哪里。例如,如果您希望用户在 he/she destroy
记录之后转到所有消息页面,则需要将以下行添加到方法的末尾:
redirect_to messages_path
所以我有一个用户可以提交的简单消息列表。我正在尝试为每条消息放置一个删除按钮(有效)。但是如您所见,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
方法中,您既没有 render
ing 任何东西,也没有 redirect_to
ing 任何东西。在你 destroy
对象之后,你必须告诉它应该去哪里。例如,如果您希望用户在 he/she destroy
记录之后转到所有消息页面,则需要将以下行添加到方法的末尾:
redirect_to messages_path