我正在处理RoR项目的订单表格,并希望用数据库中的现有客户信息填写买家信息.因此,我需要从下拉列表中选择客户名称(选择字段),然后使用所选客户的信息填写买家信息字段(姓名,电话,电子邮件,地址等).
因此,我的问题是,这样做的首选做法是什么?我的想法类似于使用GET方法进行Ajax调用以获取json格式数据,然后使用jQuery填充或更改买方信息字段.这是实现这一功能的正确"轨道方式"吗?
顺便说一下,整个订单表单是simple_form,买家信息字段都在simple_fields_for部分.如果这有帮助.
执行此操作的"标准"方式是通过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 } }); });