在Ajax Call in Rails之后刷新表单的一部分

时间:2017-09-18 14:11:40

标签: ruby-on-rails ajax simple-form

我有一个创建新订单的表单。其中一个表单元素是地址下拉列表,允许用户从地址模型中选择一个地址。我已对其进行了设置,以便用户可以通过按下订单表单中的按钮,通过Ajax模式创建地址。 除了通过Ajax创建新地址后我想在订单表单中刷新下拉列表的部分外,一切都有效。

我的(部分编辑的)代码如下:

订单控制器

def new
  @order = Order.new
end

地址控制器

def new
  @address = Address.new(user: current_or_guest_user)
  respond_with @address
end

def create
  @address = Address.new(address_params)
  respond_to do |format|
    if @address.save
      format.js   { render action: 'show_address_ajax', status: :created, location: @address }
    else
      render json: @address.errors, status: :unprocessable_entity
    end
  end
end

订单视图(包括订购单)

<%= simple_form_for @order do |f| %>
<div class="row address_dropdown" id="address1_dropdown">
  <%= render "address1", f: f %>
</div>
<%= link_to ('New Address'), new_address_path,
  data: { modal: true }, class: "btn btn-default", id: "new-pickup-address" %>

<%= f.button :submit, "Save Order", class: 'btn-lg' %>

地址下拉部分(&#39; orders / _address1.html.erb&#39;)

<%= f.association :address, label: false, collection: current_or_guest_user.addresses.pluck(:nombre, :id), prompt: "Select Address", :input_html => { :class => '' } %>

Javascript渲染部分(&#39; show_address_ajax.js.erb&#39;)

$("#address1_dropdown").html("<%= escape_javascript(render partial: 'orders/address1, locals: { f: f }) %>");

订单表格渲染正常,地址模式表单(为简单起见未显示)也渲染确定并创建新地址,但问题是我无法在Ajax调用完成后刷新订单表单中的地址下拉列表,如f变量未定义,但在Order视图中。

感谢任何帮助。

0 个答案:

没有答案