当前位置:  开发笔记 > 编程语言 > 正文

在提交表单之前,根据下拉列表的值更改动态填充表单字段

如何解决《在提交表单之前,根据下拉列表的值更改动态填充表单字段》经验,为你挑选了1个好方法。

我正在处理RoR项目的订单表格,并希望用数据库中的现有客户信息填写买家信息.因此,我需要从下拉列表中选择客户名称(选择字段),然后使用所选客户的信息填写买家信息字段(姓名,电话,电子邮件,地址等).

因此,我的问题是,这样做的首选做法是什么?我的想法类似于使用GET方法进行Ajax调用以获取json格式数据,然后使用jQuery填充或更改买方信息字段.这是实现这一功能的正确"轨道方式"吗?

顺便说一下,整个订单表单是simple_form,买家信息字段都在simple_fields_for部分.如果这有帮助.



1> Richard Peck..:

执行此操作的"标准"方式是通过ajax(只需向JSON您的users#show操作发送请求,它应该返回您请求的用户数据 - 我将在一秒钟内写入).


从你的问题来看,你似乎应该做点别的事.

用数据库中的现有客户信息填写买家信息

这是不好的做法 - 它会导致数据库中的重复条目.

这应该做的方式是采取优势associations里面的Rails,让你联想一个customer新的买家信息:

#app/models/order.rb
class Order < ActiveRecord::Base
   belongs_to :customer #-> requires "customer_id" in "orders" table
end

#app/models/customer.rb
class Customer < ActiveRecord::Base
   has_many :orders
end

这将customer在您的order:上创建一个关联对象@order.customer,它将返回您的其他数据库表中的数据.

您必须确保customer_id为新Order对象填充参数:

#app/controllers/orders_controller.rb
class OrdersController < ApplicationController
   def new
      @customers = Customer.all
      @order = Order.new
   end

   def create
      @order = Order.new order_params
      @order.save
   end

   private

   def order_params
      params.require(:order).permit(:customer_id, :etc, :etc)
   end
end

#app/views/orders/new.html.erb
<%= form_for @order do |f| %>
   <%= f.collection_select :customer_id, @customers, :id, :name %>
   <%= f.submit %>
<% end %>

JS

也可以使用上述代码中的内容.

您基本上需要向您的customers#show操作发送Ajax(JSON)请求,该请求将返回特定customer于JS 的相关字段:

#app/controllers/customers_controller.rb
class CustomersController < ApplicationController
   respond_to :json, :html, only: :show

   def show
      @customer = Customer.find params[:id]
      respond_with @customer
   end
end

#app/assets/javascripts/application.js
$(document).on("change", "select#customer_id", function(e){
   $.ajax({
      url: "customers",
      dataType: "json",
      data: { id: $(this).val() },
      success: function(data){
         // Output returned data in form
      }
   });
});

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有