2017-05-14 30 views
1

我正在嘗試創建一個通知中心,其中包含像facebook一樣的分頁(通過Kaminari) 。如何在標題中使用Kaminari分頁

我希望此中心顯示來自任何頁面的分頁(此中心包含在頭文件中)。

現在我已經編寫了下面的代碼,然後在我訪問home.html時顯示正確。但是其分頁在其他頁面(例如views/test/test.html.erb)中不起作用。 可能,ajax似乎無法讀取js文件,所以如果我把test.js.erb文件放在views/test中,它就會起作用。

鑑於操作和維護,這是不受歡迎的方式。

如何通過只使用一個js.erb文件讀取分頁?感謝您的幫助

源代碼如下。

模型

應用/模型/ item.rb的

class Item < ActiveRecord::Base 
    paginates_per 50 
end 

控制器


應用程序/控制器/ items_controller.rb

before_action :pagination 


def pagination 
    @items = Item.page params[:page] 
end 

查看


應用程序/視圖/靜態/ home.html.erb

<%= render 'static/header' %> <!-- reading partial header--> 

應用程序/視圖/靜態/ _header.html.erb

<div><%= render 'application/items', items:@items %></div>  

應用/views/static/home.js.erb

$('#items').append("<%= escape_javascript(render '_items', object: @items) %>"); 
    $("#more_link").replaceWith("<%= escape_javascript(link_to_next_page(@items, 'more', remote: true, id: 'more_link')) %>"); 

應用程序/視圖/應用/ _items.html.erb

<div id="items"> 
    <%= render 'items' %> 
</div> 
<%= link_to_next_page @items, 'more', remote: true, id: 'more_link' %> 

應用程序/視圖/應用/ __ items.html.erb

<% @items.each do |item| %> 
    <div><%= item.name %></div> 
<% end %> 

回答

0

我建議建立一個獨立的控制器處理ajax請求的操作:

class ItemsController 
    def paginate 
    end 
end 

然後移動js.erb代碼在views/items/paginate.js.erb之下。

雷的link_to_next_page助手使用link_to內,因此應該可以controlleraction PARAMS添加鏈接:

<%= 
    link_to_next_page @items, 'more', 
    controller: 'items', 
    action: 'paginate', 
    remote: true, 
    id: 'more_link' 
%> 
+0

謝謝您的回答! 除了你的解決方案,設置路由,最終它的工作完美! 特別感謝您對link_to幫手的評論! –