2012-06-05 37 views
0

在我的應用程序中,我有一個「學生」部分,它將@students集合傳遞給「學生」部分。這些最終會顯示在我的索引頁上作爲學生的圖像。當用戶點擊圖片時,我彈出一個包含學生照片和文字的框。現在,我有一個上一個/下一個按鈕,允許用戶循環瀏覽學生。我實現了無插件循環......只是一個簡單的ajax調用來加載下一個/上一個對象。我的問題是,當我處於最後(或第一)記錄時,我無法檢測到。我需要一種方法來設置第一個和最後一個對象的url參數。所以它看起來像這樣:www.mysite.com/students/15?last=true鐵軌集合中的第一個和最後一個對象

我無法找到一個乾淨的方式來做到這一點。我也不確定我是否以正確的方式思考這個問題。我應該附加url參數嗎?或者我應該以某種方式修改對象,以便在從模型中檢索對象後添加其他屬性?

謝謝。

[編輯]

只是想讓這一點更加清晰。 當我彈出學生燈箱,我有2個鏈接:以前的(鏈接到前一個記錄)和下一個鏈接到下一個記錄。我使用jquery $ .load方法創建ajax請求,並在我想要的數據中加載,並在我的燈箱中加入div,每當我點擊上一個或下一個時。 ('previous')。點擊( $('mydiv')。load('先前的學生的網址'); );點擊()

我首先彈出dom樹,得到'前一個/下一個學生的URL'。我存儲這些,所以我可以再次參考他們。

我的問題是,我不能告訴我什麼時候在列表中的第一個學生或最後一個。我需要知道這個,所以我可以禁用prev/next按鈕。我想我可以通過rails/ruby​​或通過JavaScript來做到這一點。最初,我認爲通過在鏈接或上一個/下一個學生上添加一個url參數(以表明它們是第一個還是最後一個),然後我可以在rails中檢測到這一點,並執行一個簡單的if/else來禁用鏈接。但我被困在試圖用我指的部分的方式做到這一點。

回答

1

EHM,我與我的靈感的方式做到這一點,也許幫助你: 學生/索引 傳統的索引文件與ajax加載列表,will_paginate和我上面寫的代碼。每個學生都有鏈接的圖像,鏈接有像/學生/ 4和遙遠:真實的。

學生表演控制器

@student = Student.find(params[:id]) 

學生表演的js文件 經典JS渲染 「學生」

學生_student.html.erb 視圖和兩個視圖助手:prev_help(PARAMS [:編號] )和next_help(PARAMS [:ID])

助手:

def prev_help(id) 
    @student = Student.find(id - 1) 
    link_to("Prev". @student) if @student.nil?   
end 

def next_help(id) 
    @student = Student.find(id + 1) 
    link_to("Prev". @student) if @student.nil?   
end 

我現在沒時間了,但如果這個解決方案對你沒有幫助,你可以在明天給我寫信,我會創建示例應用程序來測試我的解決方案並與你合作。

+0

嘿@quatermain,我真的很感謝這個幫助。我會嘗試一下並讓你知道。謝謝! – berto77

+0

它工作?你需要幫助嗎? – quatermain

1

你需要最後一頁,還是來自@students的最後一個學生? 我使用gem will_paginate來列出頁面,並使用簡單的JS「ajax」來刷新下一頁。您可以使用此寶石和每頁對象設置爲1,例如:

@students = Student.order(sort_column + " " + sort_direction).paginate(:per_page => 1, :page => params[:page]) 

例 「Ajax」 的學生/ index.js:

$('tbody').append('<%= j render(@students) %>'); 
<% if @students.next_page %> 
    $('.pagination').replaceWith('<%= j will_paginate(@students) %>'); 
<% else %> 
    $('.pagination').remove(); 
<% end %> 

coffescript來激活它:

if $('.pagination').length 
     $(window).scroll -> 
      url = $('.pagination .next_page').attr('href') 
      if url && $(window).scrollTop() > $(document).height() - $(window).height() - 230 
      $('.pagination').text("Načítavam...") 
      $.getScript(url) 
     $(window).scroll() 

我學習它從我的聖經;-) RailsCasts - Ryan Bates

+0

感謝您的評論,但我想我可能沒有足夠清楚地解釋。我編輯了上面的描述。 – berto77

+0

您可以使用will paginate。寶石'will_paginate'測試你的當前頁面並顯示/隱藏下一頁鏈接。如果你可以編寫自己的代碼,我認爲你必須測試ID,如果student.id == Student.last.id隱藏下一頁鏈接。 – quatermain

+0

所以在這種情況下'學生'是一個數組的權利?但我的問題是,我正在使用一個部分發送一個集合到另一個部分進行渲染。因此,在第二部分中,我再也無法訪問該集合,因此我無法測試完整集合以確定我處於哪個記錄。我現在想我可能需要在第一個/最後一個記錄上添加一個虛擬屬性,但這看起來好像過度殺人 – berto77

相關問題