我正在处理RoR项目的订单,并希望用数据库中的现有客户信息填充买家信息。因此,我需要从下拉列表中选择客户名称(选择字段),然后使用所选客户的信息填写买家信息字段(姓名,电话,电子邮件,地址等)。
因此,我的问题是,这样做的首选做法是什么?我的想法类似于使用GET方法进行Ajax调用以获取json格式数据,然后使用jQuery填充或更改买方信息字段。这是正确的" rails way"实现这个功能?
顺便说一下,整个订单表单是simple_form,买家信息字段都在simple_fields_for部分。如果这有帮助。答案 0 :(得分:6)
执行此操作的“标准”方式是通过ajax(只需向您的RewriteEngine on
Options +FollowSymlinks +MultiViews -Indexes
操作发送JSON
请求,它应该返回您请求的用户数据 - 我将写入一秒钟。
从您的问题来看,您似乎应该做点其他事情。
使用数据库中的现有客户信息填写买家信息
这是不良做法 - 它会导致数据库中的重复条目。
应该采用的方法是利用Rails中的associations
来关联 users#show
新买家信息:
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
<强> JS 强>
您基本上需要向#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 %>
操作发送Ajax(JSON)请求,该请求会将特定customers#show
的相关字段返回给您的JS:
customer
答案 1 :(得分:-1)
如果您想根据用户的选择填充表单,那么您绝对需要使用某种javascript解决方案。要么进行AJAX调用,要么就是可行的(即你没有太多的客户以这种方式序列化,而且不是安全性或性能问题)你可以将客户数据作为json预加载到你的前端javascript中所以(在你看来):
<script>
var customerData = JSON.parse(<%= @customers.to_json %>);
</script>
然后让所选用户的数据根据该变量中的数据填充表单。
这样可以提供更快更顺畅的用户体验,并且在每次用户更改该选择框的值时,不必在后端更容易进行AJAX调用。