破坏?删除?这里发生了什么? Rails 2.3.5

时间:2010-03-07 10:49:02

标签: ruby-on-rails

我是铁杆新手。我的rails版本是2.3.5。我找到了用法:

在控制器中,定义了一个destroy方法,在视图中,您可以使用:action => “删除”以触发该方法。动作名称是否必须与方法名称相同?为什么删除映射到destroy?

同样,在我的控制器中,我定义了一个名为destroy的方法来删除记录。在视图中,我有<%= link_to "remove", :action => 'destroy', :id => myrecord %>。但它在实践中从未奏效。每次按下删除链接,它都会将我重定向到节目视图,显示记录的内容。我很确定我的破坏方法是:

def destroy
    @myobject = MyObject.find(params[:id])
    @myobject.destroy
    @redirect_to :action = 'index'
end

如果我将方法名称从destroy更改为remove_me之类的内容并在视图中将操作名称更改为remove_me,则一切都按预期工作。

在上述两个奇怪的问题中,我确信我的配置中没有棘手的路由设置。

总而言之,似乎破坏和删除是rails中的神秘关键字。任何人都可以向我解释这个吗?

3 个答案:

答案 0 :(得分:1)

您可能将MyObject设置为routes.rb中的资源。资源获得的几个路径与行动名称不直接匹配。当您使用与资源定义的路由不匹配的操作名称时,您将获得直接映射到操作名称的默认路由。

我发现this link很好地解释了rails的路由。看一下“RESTful routing”部分。

答案 1 :(得分:1)

如果您使用的是REST路由,则destory仅支持删除方法。你可以改变这样的代码

 link_to "remove", :action => 'destroy', :id => myrecord", :method => :delete

添加:method =&gt; :删除 rails将添加名为“_method”的隐藏输入,值为“delete”

答案 2 :(得分:1)

全部替换:post =&gt; true with:method =&gt; :交