0

我的 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

但这对我来说似乎很乱。有没有更好的“railsy”方式来实现这一点?

另外,我目前没有在我的页面中使用任何 JS/Ajax,我希望最终让购物车成为通过 Ajax 呈现的 div。当用户单击删除按钮时,我希望远程提交表单,以便一旦将商品从购物车中删除,购物车 div 就可以通过 Ajax 重新呈现 - 这是否有可能拥有一个具有一个按钮通过ajax提交一些表单,一些没有ajax的表单?

4

1 回答 1

0

这是一个庞大的主题,但对于 ajax 删除按钮,您可以像这样开始。在您的表格视图中,使用:

<tr id="tr_<%= item.id %>">
  ...
  <%= link_to 'delete', item, method: :delete, remote: true %>
</tr>

您必须在您的销毁路由上处理 ajax 调用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 %>');

然后,当您单击删除按钮时,它将调用控制器中的销毁操作。由于按钮被定义为远程,rails 将自动执行 ajax 请求并且不会重新加载页面。您的控制器将呈现相应的 js 视图,然后您在其中从表中删除该行。

正如我所说,这只是一个开始,它可以在 javascript 方面做得更好。另请注意,我没有检查代码。

另请查看http://railscasts.com/episodes/136-jquery-ajax-revised?view=asciicast 以获得更深入的解释。

于 2013-04-18T20:29:24.663 回答