我有一个患者的下拉菜单。当用户从下拉菜单中选择患者时,我想使用JQUERY获取该患者的ID,然后向服务器发出AJAX调用,以将该患者作为我可以在我视图中使用的变量返回。
下拉:
<%= f.select :patient_id, content_tag(:option,'select
patient...',:value=>"")+content_tag(:option,'New
Patient',:value=>"")+options_from_collection_for_select(@patients, 'id',
'full_name'), :class=>"form-control" %>
JS:
$('#assessment_patient_id').change(function(){
var e = document.getElementById("assessment_patient_id");
var patient_id = (e.options[e.selectedIndex].value)
if (patient_id == 0) {
window.location.href = "/patients/new"
} else {
$.ajax({
type: "POST",
url: "get-patient",
data: {patient_id: patient_id},
success: function(data){
console.log(data)
},
error: function(err){
console.log(err);
}
});
}
控制器:
respond_to :js, :html, :json
def get_patient
@patient = Patient.find(params[:patient_id])
respond_with @patient
end
路线:
get 'assessments/get-patient', :to => 'assessment#get_patient'
GET-patient.js.erb
$('#assessment-type').slideDown(350);
我真正想要实现的是能够去&lt;%= @ patient.method_name_here%&gt;在我的视图中在后,用户从下拉列表中选择一名患者。
但是我无法弄清楚如何将这些数据作为控制器中的对象返回。它去哪儿了?
答案 0 :(得分:1)
你会做这样的事情。在视图中添加一个id为#patient-name的div(例如)
然后,js.erb文件可以更新dom。
# get-patient.js.erb
$('#assessment-type').slideDown(350);
$('#patient-name').html('#{j(@patient.name)}');
而且,这个请求可以转到patients_controller#show吗?