使用 ajax 根据选择的返回来获取 copay 的值。
因为有很多步骤,我会列出它们,但你可以在其他十几个 SO 问题中找到它们。
添加Javascript,这个coffeescript,但这只是您更改的基础->发送数据调用-因此可以随意更改。
#appointment.js.coffee
$(document).ready ->
$(".client_select").on "change", ->
$.ajax
url: "/appointments/new"
type: "GET"
dataType: "script"
data:
client: $(".client_select").val()
确保您的表单具有 2 个 jquery 元素来获取数据和推送数据。
# First the field to pull from
<%= f.association :client, label_method: lambda { |c| "#{c.first_name} #{c.last_name}" }, collection: current_user.clients, input_html: { class: 'client_select' } %>
# And then the field to push to
<%= f.input :copay_amount, input_html: { class: 'copay_from_client' } %>
这将对控制器的“新”操作发出请求appointments
,因此您需要添加一个 javascript 响应以确保它可以呈现下一步,即 UJS 文件。
# appointments_controller.rb
def new
# ... All the stuff you're normally doing and additionally:
#you'll have to adjust the params argument to match your select field
insurance_copay = Client.find(params[:client]).insurance_provider.copay
respond_to do |format|
format.html # new.html.erb
format.js { render "new", locals:{insurance_copay: insurance_copay} }
format.json { render json: @appointment }
end
end
现在添加 UJS,new.js.erb
$(".copay_from_client").val('<%= @insurance_copay %>');