2017-05-14 40 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帮手的评论! –