2010-05-24 96 views
1

当我点击我创建的删除链接时,它在控制器中不会执行任何操作(即使是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 

回答

3

设计问题不谈,我认为你的:method选项被解释为查询参数。如果您将鼠标悬停在链接上,您是否可以在URL中看到“方法”?

如果是这样,尝试...

<%= link_to "Delete", {:controller => "/admin", :action => "tips", :id => t.id}, :method => :delete, :confirm => "Are you sure?" %> 

注意周围定义请求的URL部分大括号。

关于设计:任何时候,如果您在一个控制器方法中有多个操作,则可能存在设计问题。在这种情况下,我不考虑使用一个管理员控制器方法来执行多个提示操作,我会考虑制作一个专用的tips_controller控制器来映射到您的Tip模型。

如果您使用REST风格的路线,那就是,在你设定config.rb ...

map.resources :tips 

...那么你可以使用的创建和销毁您tips_controller方法,用于创建和删除你的秘诀分别。

+0

你的想法似乎会为每个拥有CRUD的模型创建一大堆控制器。您提到的“设计问题”具体是什么,使您的建议成为更好的解决方案? – Kevin 2010-05-24 07:30:38

+0

是的,确切地说。我不会说这是我的想法。这是Rails支持的模式。也有例外,但通常情况下,您希望拥有映射到每个模型的控制器和视图。首先,这是Rails约定,所以遵循它将会让你的生活在路由和URL方面更容易。首先,MVC方法的原因有很多 - 处理复杂性(例如,多个简单控制器比一个巨型控制器更好),可维护性,可读性......太多,无法加入此评论,但有大量关于MVC。 – Greg 2010-05-24 08:07:50

+0

大括号解决了你的问题吗? – Greg 2010-05-24 08:11:01