我是铁杆新手。我的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中的神秘关键字。任何人都可以向我解释这个吗?
答案 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; :交