Rails表单:使用AJAX基于其他collection_select值更新collection_select选项

我刚刚开始学习Rails,并且我与内置工具,Javascript和AJAX相处得很好但是对我来说是非常新的。 这是问题所在:

我有一张订单。 每个订单都属于一个联系人,可以有不同的账单和送货地址。 collection_select框用于设置这些值。 如果我不介意必要的页面重新加载以减少可用的地址选项(这应该仅限于属于所选联系人的地址),所有这些都可以正常工作。

在没有页面重新加载的情况下,使这项工作最简单,最容易维护的选项是什么?

这就是我在卡住之前尝试将表单变形的问题。 让我们从views / orders / edit.html.erb的摘录开始:

 ...     ...  

我省略了送货地址选择框,因为它与开票下拉列表相同。 我们暂时只关注它。

这是controllers / orders_controller.rb中的更新操作:

 def update @order = Order.find(params[:id]) respond_to do |format| if @order.update_attributes(order_params) format.html { redirect_to edit_order_path, notice: "Auftrag aktualisiert." } format.json { render json: @order } format.js else render 'edit' end end end 

我尝试查看联系人选择框以进行更改,以便立即保存,希望地址选择也会立即反映这些更改。 此观察者位于assets / javascript / orders.js.erb中

 $('#order_contact_id').change(function() { $(this).parents('form:first').submit(); }); 

那时我希望这已经足够了,数据已经保存了,但显然Rails希望我在views / orders / update.js.erb中定义一些进一步的指令 – 这里我很无奈。 这就是我提出的:

 $('#order_billing_address_id').replaceWith(''); 

order_billing_address_id是帐单地址的collection_select框的id,我基本上只想刷新内置的rails collection_select标签。

这实际上是有效的 – 如果我选择一个不同的联系人,地址框会立即填充其各自的地址 – 但是只有当联系人没有多个相关联的地址时。 当我选择具有多个地址选项的联系人时,地址选择框会粘贴上一个只有一个地址的联系人的选项。 如果我手动刷新页面虽然显示正确的值,即使对于具有多个地址的联系人也是如此。 所以数据肯定会被保存,这告诉我我的update.js.erb可能就是问题所在。

我在选择各种联系人时看到了rails dev服务器的输出,并且数据似乎被处理,保存和检索得很好 – 我无法弄清楚单地址联系人和多地址之间的那些服务器日志的差异 – 联系人。 根据这些日志,查询和检索到的记录ID和集合按预期匹配。

我在这做错了什么? 或者更一般地说,对于我正在尝试做的事情,是否有更好的方法/实践? 请记住,我是Rails的新手,甚至更多的Javascript。 非常感激您的帮忙。