我有三种模式:约会,客户和保险提供者
客户has_many:约会
还有一个客户has_many:insurance_providers(想法是我想在那里存储历史信息)。
在我看来创建一个新约会,我有这个(除其他外):
<%= f.association :client, label_method: lambda { |c| "#{c.first_name} #{c.last_name}" }, collection: current_user.clients %>
这很好,但我想进入insurance_providers的copay字段。
基本上,这就是你到达目的地的方式:
appointment.client.insurance_provider.copay
我想要做的是根据从下拉菜单中选择的客户端预填充“共付额”字段。
我该怎么做?
如果您需要明确查看我的模型或视图,请与我们联系。
答案 0 :(得分:0)
如果我理解正确,您希望根据关联中的值填充第二个选择值。
基本上,你需要JQuery / AJAX来为你做这件事。 JQuery观看第一个选择,然后AJAX根据选择的值从rails获取数据,然后JQuery再次向第二个选择添加值。
另一种方法是为每个选择使用best_in_place之类的就地编辑器,这将为您完成AJAX-y的操作。
答案 1 :(得分:0)
使用ajax根据select的返回值获取copay的值。
因为有很多步骤,我会把它们列出来,但你可以在其他十几个问题中找到它们。
添加Javascript,这个coffeescript但它只是你的基本改变 - &gt;发送数据通话 - 随意改变。
#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 %>');