Rails + Radio Buttons + AJAX:如何在单选按钮上单击渲染?

时间:2013-05-31 18:17:50

标签: ruby-on-rails

我的电子商务网站有一个结帐表单。它有用于发货选项(快递,标准等)的单选按钮,我希望它显示<%= shipping_delivered_day %>的动态值,以显示在用户使用AJAX点击的按钮旁边的p.label_delivery_date标签内。这是我的HTML:

<% @shipping_services.each do |ship| %>
  <%
    shipping_service = ShippingService.find_by_name(ship.shipping_service)
    ship_id_value = ""+shipping_service.id.to_s
  %>
  <label class="reverse-label">
    <span class="check">
        <%= radio_button :shipment, :desired_shipping_method, ship_id_value, :checked => "checked" %>
        <%= radio_button :shipment, :desired_shipping_method, ship_id_value "%>
    </span>

    <span class="label">
      <%= shipping_service.description %>
      <p class="label_delivery_date" ></p>
    </span>
    <span class="label">
      <%= shipping_service.description %>
    </span>
  </label>

<% end %>

我知道我可以在单选按钮上执行:onclick选项,但这只会将我发送到javascript文件。我需要能够传递我的动态shipping_delivered_day值,所以我需要rails来处理它。如何通过单击单选按钮发送JS请求?

1 个答案:

答案 0 :(得分:2)

Ruby / Rails实际上提供了一种非常灵活的方法。您所要做的就是让单选按钮调用javascript函数,然后将部分渲染放在该函数中,如下所示:

<script>
function render_partial() {
  $('#partial-area').html('<%=j render :partial => "partial" %>')
}
</script>

<%=  radio_button :model, :field, :value, :onclick => "render_partial();" %>
<div id="partial-area"></div>

当单击单选按钮时,这将使给定的部分呈现为“部分区域”div。对于多个部分,只需要在同一个div上运行多个函数。在您的特定实例中,您希望您的部分代码包含一些代码,这些代码将决定您的送货日期。您可以使用本地(render :partial => "ship_3day", :locals => {:p => @product})呈现部分,并让部分返回相应的结果(<%= p.shipping_delivered_day %>)。