我的rails应用程序中有一个页面,要求我在一个表单上有多个提交按钮。为了让你知道我想要做什么,我有一个购物车,这是一个项目表。每个项目都有一个订单按钮和一个删除按钮。还有一个与每个项目相关联的复选框,以便可以选择多个项目,然后通过表格底部的按钮提交订单。
目前,这三个按钮中的每一个都具有与之关联的不同“名称”属性。在我的控制器中,我的代码类似于以下内容:
if params[:remove]
#do stuff to remove item from shopping cart, then re-direct back to shopping cart
elsif params[:order_one]
#do stuff to order item, then render a confirm page
else
#do stuff to order multiple items, then render confirm page
end
但这对我来说似乎很混乱。是否有更好的“固定”方式来实现这个?
另外,我目前没有在我的页面中使用任何JS / Ajax,我希望最终让购物车成为通过Ajax呈现的div。当用户点击删除按钮时,我希望远程提交表单,以便一旦从购物车中删除项目,就可以通过Ajax重新呈现购物车div - 这样就可以使用一个表单一个按钮通过ajax提交一些表单,一些表单没有ajax?
答案 0 :(得分:0)
这是一个很大的主题,但是对于ajax删除按钮,你可以这样开始。在表格视图中,使用:
<tr id="tr_<%= item.id %>">
...
<%= link_to 'delete', item, method: :delete, remote: true %>
</tr>
您必须在items_controller.rb
:
def destroy
@item= Item.destroy(params[:id])
respond_to do |format|
format.html { redirect_to items_url }
format.js
end
end
在项目视图文件夹中创建一个新的destroy.js.erb
文件,并将其放入其中:
$('#your_table').remove('#tr_<%= @item.id %>');
然后当您单击“删除”按钮时,它将调用控制器中的destroy动作。由于按钮被定义为远程,因此rails将自动执行ajax请求,并且不会重新加载页面。您的控制器将呈现相应的js视图,然后从表中删除该行。
正如我所说,这只是一个开始,它可以在javascript方面做得更好。另请注意,我没有检查代码。
另请查看http://railscasts.com/episodes/136-jquery-ajax-revised?view=asciicast以获得更深入的解释。