2013-10-16 72 views
1

我需要在我的視圖中顯示一些元素,然後根據用戶選擇進行篩選。我試圖比較來自控制器結果與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.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 %> 
    ], 

完美的作品,但我有一個選項,用戶可以選擇一個醫生,只有appoi應該出現該醫生的資料。我怎麼能做到這一點?我試圖像這樣過濾它們,但它不起作用:

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 %> 
    ], 

謝謝大家。

回答

1

編輯:要獲得預約使用選擇框只有一名醫生,當在選擇框中選擇一個選項,先發送一個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> 
    }) 
}); 

這是控制器的行動將看起來像:

def retrieve_doctor_id 
    selected_doctor = Doctor.find(params[:selected]) 
    @appointments = selected_doctor.appointments.select([:id, :start_date, :end_date]) 
    respond_to do |format| 
    format.json render :partial => "your_controller/retrieve_doctor_id", :locals => {:appointments => @appointments} 
    end  
end 

文件:應用程序/視圖/ 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 %> 
], 

我還沒有測試過,所以告訴我是否有任何錯誤或問題。

+0

謝謝,但不起作用,因爲doctor_id是一個javascript變量,我在用戶從下拉菜單中選擇一個選項後創建。我收到以下錯誤:「未定義的本地變量或方法'doctor_id'」 – Cristiano

+0

@ ZdravkoVajudin我認爲比較JavaScript變量和ruby/rails變量的唯一方法是在選擇框更改後發生ajax post請求,然後轉到一個控制器,該控制器將JavaScript的約會'doctor_id'發送回去。我會用我正在談論的內容更新我的答案。 – jvperrin

+0

@ZdravkoVajudin我已經更新了我的答案,希望它能更好地工作。 – jvperrin

0

像這樣的東西應該工作

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 %> 
    ], 

假設@doctor_id是要篩選由醫生的ID。但是,我必須評論說這種方法非常混亂。你應該真的使用一個json構建器,如rabl

+0

謝謝,但問題是,當用戶從下拉菜單中選擇一個選項時,doctor_id被創建,所以它是一個JavaScript變量,我不能這樣比較。 – Cristiano

相關問題