Javascript 如何从视图中的控制器筛选结果
我需要在视图中显示一些元素,然后根据用户选择过滤它们。我试图将控制器结果中的变量与javascript变量进行比较,但在这种情况下似乎是不可能的 我有以下型号:Javascript 如何从视图中的控制器筛选结果,javascript,ruby-on-rails,ruby,ajax,Javascript,Ruby On Rails,Ruby,Ajax,我需要在视图中显示一些元素,然后根据用户选择过滤它们。我试图将控制器结果中的变量与javascript变量进行比较,但在这种情况下似乎是不可能的 我有以下型号: create_table "appointments", force: true do |t| t.integer "doctor_id" t.integer "user_id" t.datetime "start_date" t.datetime "created_at" t.datetim
create_table "appointments", force: true do |t|
t.integer "doctor_id"
t.integer "user_id"
t.datetime "start_date"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "end_date"
end
在我的控制器中,我有以下功能来获得所有约会:
@appointments = Appointment.all
现在,在我的视图中,我显示所有约会,如下所示:
events:
[
<% @appointments.each do |appointment| %>
{
id : "<%= appointment.id %>",
title : "Reserved",
start : "<%= appointment.start_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
end : "<%= appointment.end_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
allDay : false
},
<% end %>
],
事件:
[
{
id:“”,
标题:“保留”,
开始:“,
完:,
全天:错
},
],
这很好,但我有一个选项,用户可以选择一个医生,只有从该医生的预约应该出现。我怎样才能做到这一点?我试图像这样过滤它们,但不起作用:
events:
[
<% @appointments.each do |appointment| %>
if <%= appointment.doctor_id %> == doctor_id{
{
id : "<%= appointment.id %>",
title : "Reserved",
start : "<%= appointment.start_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
end : "<%= appointment.end_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
allDay : false
},
}
<% end %>
],
事件:
[
如果==医生id{
{
id:“”,
标题:“保留”,
开始:“,
完:,
全天:错
},
}
],
谢谢大家。编辑:要使用选择框仅获得一名医生的预约,请在选择框中选择一个选项后首先发送ajax请求:
$("select").change(function() {
$.ajax({
type: 'POST',
data: 'selected=' + $("select option:selected").text(),
dataType: 'json',
success: function(data) {
if ($.trim(data) !== '') {
// data should be the returned json of all the appointments for only the selected doctor. Do whatever you want with it.
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus);
console.log(errorThrown);
},
url: <insert post route here>
})
});
文件:app/views/your_controller/retrieve_doctor_id.json.erb:
events:
[
<% appointments.each do |appointment| %>
{
id : "<%= appointment.id %>",
title : "Reserved",
start : "<%= appointment.start_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
end : "<%= appointment.end_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
allDay : false
},
<% end %>
],
事件:
[
{
id:“”,
标题:“保留”,
开始:“,
完:,
全天:错
},
],
我尚未对此进行测试,请告诉我是否有任何错误或问题。编辑:要使用选择框仅获取一名医生的预约,请在选择框中选择一个选项时首先发送ajax请求:
$("select").change(function() {
$.ajax({
type: 'POST',
data: 'selected=' + $("select option:selected").text(),
dataType: 'json',
success: function(data) {
if ($.trim(data) !== '') {
// data should be the returned json of all the appointments for only the selected doctor. Do whatever you want with it.
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus);
console.log(errorThrown);
},
url: <insert post route here>
})
});
文件:app/views/your_controller/retrieve_doctor_id.json.erb:
events:
[
<% appointments.each do |appointment| %>
{
id : "<%= appointment.id %>",
title : "Reserved",
start : "<%= appointment.start_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
end : "<%= appointment.end_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
allDay : false
},
<% end %>
],
事件:
[
{
id:“”,
标题:“保留”,
开始:“,
完:,
全天:错
},
],
我还没有测试过这个,所以告诉我它是否有任何错误或问题。类似的东西应该可以工作
events:
[
<% @appointments.select { |a| a.doctor_id == @doctor_id }.each do |appointment| %>
{
id : "<%= appointment.id %>",
title : "Reserved",
start : "<%= appointment.start_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
end : "<%= appointment.end_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
allDay : false
},
<% end %>
],
事件:
[
{
id:“”,
标题:“保留”,
开始:“,
完:,
全天:错
},
],
假设
@doctor\u id
是您要筛选的医生的id。不过,我必须指出,这种做法确实很混乱。您应该真正使用json构建器,例如。类似的东西应该可以工作
events:
[
<% @appointments.select { |a| a.doctor_id == @doctor_id }.each do |appointment| %>
{
id : "<%= appointment.id %>",
title : "Reserved",
start : "<%= appointment.start_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
end : "<%= appointment.end_date.in_time_zone.strftime '%Y-%m-%dT%H:%M:%S' %>",
allDay : false
},
<% end %>
],
事件:
[
{
id:“”,
标题:“保留”,
开始:“,
完:,
全天:错
},
],
假设
@doctor\u id
是您要筛选的医生的id。不过,我必须指出,这种做法确实很混乱。您真的应该使用json构建器,例如。谢谢,但这不起作用,因为doctor_id是一个javascript变量,我是在用户从下拉菜单中选择一个选项后创建的。我收到以下错误:“未定义的局部变量或方法'doctor_id'@ZdravkoVajudin我认为比较javascript变量和ruby/rails变量的唯一方法是在更改选择框后发出ajax post请求,然后,它转到一个控制器,该控制器将约会的医生id
发送回javascript。我会用我所说的更新我的答案。@ZdravkoVajudin我已经更新了我的答案,希望它能更好地工作。我想我们很接近了。剩下的唯一问题是@Appointment在填写事件时不包含数据。我收到以下错误:nil的未定义方法'each':nilclass当我尝试在'success'函数中打印id时,我可以这样成功地打印它:警报(数据[0].id);所以@appoints是在controller中设置的,但它不是在视图内部设置的。谢谢,但这不起作用,因为doctor_id是一个javascript变量,我在用户从下拉菜单中选择一个选项后创建它。我收到以下错误:“未定义的局部变量或方法'doctor_id'@ZdravkoVajudin我认为比较javascript变量和ruby/rails变量的唯一方法是在更改选择框后发出ajax post请求,然后,它转到一个控制器,该控制器将约会的医生id
发送回javascript。我会用我所说的更新我的答案。@ZdravkoVajudin我已经更新了我的答案,希望它能更好地工作。我想我们很接近了。剩下的唯一问题是@Appointment在填写事件时不包含数据。我收到以下错误:nil的未定义方法'each':nilclass当我尝试在'success'函数中打印id时,我可以这样成功地打印它:警报(数据[0].id);所以@appoints是在controller中设置的,但它不是在视图内部设置的。嗯…谢谢,但问题是,当用户从下拉菜单中选择一个选项时,会创建doctor_id,所以这是一个javascript变量,我不能这样比较。谢谢,但问题是,doctor_id是在用户从下拉菜单中选择一个选项时创建的,所以这是一个javascript变量,我不能这样比较。