当我点击我创建的删除链接时,它在控制器中没有做任何事情(甚至是flash [:notice]部分)。我不是叫.delete吗?部分正确? POST部分可以正常工作,我可以添加提示。
链接:
<%= link_to "Delete", :controller => "/admin", :action => "tips", :id => t.id, :method => :delete, :confirm => "Are you sure?" %>
管理控制器
def tips
@tips = Tip.all
if request.post?
tip = Tip.new(params[:geek_tips])
if tip.save
flash[:notice] = "Saved!"
redirect_to :action => "tips"
else
flash[:notice] = "Error!"
end
elsif request.delete?
tip = Tip.find_by_id(params[:id])
tip.delete!
flash[:notice] = "Delete Message"
redirect_to :action => "tips"
end
end
答案 0 :(得分:3)
除了设计问题,我认为您的:method
选项被解释为查询参数。如果您将鼠标悬停在链接上,可以在URL中看到“方法”吗?
如果是,请尝试...
<%= link_to "Delete", {:controller => "/admin", :action => "tips", :id => t.id}, :method => :delete, :confirm => "Are you sure?" %>
请注意定义请求网址的部分周围的大括号。
关于设计:每次在一个控制器方法中有多个动作时,可能存在设计问题。在这种情况下,我会考虑使用专用的tips_controller
控制器映射到您的Tip
模型,而不是使用一个管理控制器方法来执行多个提示操作。
如果您使用RESTful路由,即在config.rb中设置...
map.resources :tips
...然后您可以使用tips_controller
中的创建和销毁方法分别创建和删除提示。