ruby-on-rails – 如何根据rails中的提交按钮触发不同的操作
发布时间:2020-12-17 02:16:32 所属栏目:百科 来源:网络整理
导读:我有一个包含东西列表的表单,以及已经有更新项目的操作. 我想要另一个按钮,单击该按钮会触发不同的操作以删除所选项目. = form_for @new_item,:url = {:controller = "item_lists",:action = "update_list" } do |f| - @items.each do |it| %input{:type="hi
我有一个包含东西列表的表单,以及已经有更新项目的操作.
我想要另一个按钮,单击该按钮会触发不同的操作以删除所选项目. = form_for @new_item,:url => {:controller => "item_lists",:action => "update_list" } do |f| - @items.each do |it| %input{:type=>"hidden",:name=>"item_list[#{it.id}]position",:value=>it.position,:class=>'position'} %textarea{:name=>"item_list[#{it.id}]field1"} =it.field1 %textarea{:name=>"item_list[#{it.id}]field2"} =it.field2 %input{:type=>'checkbox',:name=>'selected_items[]',:value=>it.id} =(it.valid?) ? "" : it.errors.full_messages %input{:type=>"submit",:value=>"Save changes",:name=>'save'} %input{:type=>"submit",:value=>"Remove selected",:name=>'delete'} This question似乎表明我应该在我的行动中检查params以找出被点击的内容.但是这感觉很麻烦,当我添加更多动作时,我的控制器很快会退化为大量的ifs. 有没有更优雅的方法来做到这一点,即让它只是路由到正确的方法? 谢谢你的帮助… 解决方法
这并不是真的与REST凝聚.在REST和Rails中,每个端点通常会有一个操作,而不是根据请求中的某些条件决定端点.
话虽这么说,您可以通过检查按下的按钮的名称来根据提交按钮过滤操作.见this SO question. 我认为,只有当你的表单做的事情略有不同时才会这样做,比如可能是一个就地更新的提交按钮而不是之后重定向的提交按钮,例如: “更新”与“更新并继续”(做作,但你理解我的意思). 在评论中解决您的问题,您的方法不必转换为长序列的ifs.您可以编写一些代码来根据提交按钮的名称确定要调用的方法.一个简单的实现可能是: # your form action def update_list send update_list_action end protected def update_list_action # just return the first action name found in the params action = %w(save delete).detect {|action| params[action] } "update_list_#{action}" end def update_list_save # handle save end def update_list_delete # handle delete end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读