我想为消息传递系统创建分页,其中显示的第一个页面包含最旧的消息,后续页面显示较新的消息.
例如,如果{a,b,c,d,e,f,g,h,i}
每页3页的正常分页是:
{a,b,c}, {d,e,f}, {g,h,i}
Run Code Online (Sandbox Code Playgroud)
然后反向分页将是:
{g,h,i}, {d,e,f}, {a,b,c}
Run Code Online (Sandbox Code Playgroud)
我计划在页面前面添加结果与正常分页相同,只从最后一页开始.
这有可能kaminari
吗?
我想通过Ajax对Kaminari应用多个分页现在这里是我的控制器代码
def user_note
@user = current_user
@notes = Bookmark.where('user_id = ? && note is not NULL',current_user.id).order('created_at DESC').page(params[:page_1]).per(4)
@bookmarks = Bookmark.where('user_id = ? && note is NULL',current_user.id).order('created_at DESC').page(params[:page_2]).per(4)
respond_to do |format|
format.html
format.xml{ render :xml => @user}
end end
Run Code Online (Sandbox Code Playgroud)
现在对于视图我有两个部分来渲染这个数组
<div id="bookmarks">
<%= render :partial =>"users/bookmark",:locals => { :bookmark => @bookmarks} %>
</div>
<%= paginate @bookmarks,:remote => true, :param_name => 'page' %>
Run Code Online (Sandbox Code Playgroud)
内部的部分是
<% bookmark.each do |bookmar| %>
<%= render :partial => 'show_bookmark.html.erb' , :locals => { :bookma => bookmar} %> …
Run Code Online (Sandbox Code Playgroud) 我有这个模板:
# app/views/posts/index.rabl
collection @posts => :posts
attributes :id, :title, :subject
child(:user) { attributes :full_name }
node(:read) { |post| post.read_by?(@user) }
Run Code Online (Sandbox Code Playgroud)
女巫回归:
{
"posts": [
{
"post": {
"id": 5,
"title": "...",
"subject": "...",
"user": {
"full_name": "..."
},
"read": true
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想添加一些分页参数来呈现这个:
{
"posts": [
{
"post": {
"id": 5,
"title": "...",
"subject": "...",
"user": {
"full_name": "..."
},
"read": true
}
}
],
"total": 42,
"total_pages": 12
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?非常感谢!
我有一个页面,用于通过使用提供的表单提交数据来搜索列表.表单参数通过ajax(post request)提交,在搜索表中创建一个新记录,然后通过show
此记录的操作显示(动态地,在表单提交的同一页面上).
结果有kaminari提供的分页链接,如下所示:
<%= paginate matches,
:params => {:controller => 'searches',
# I have to specify the id because my searches are stored in the database
:action => 'show', :id => search.id},
:remote => true %>
Run Code Online (Sandbox Code Playgroud)
请注意,分页链接会动态包含在页面中.因此,当我进行新搜索并获取新列表时,服务器会重新呈现分页链接.
这是我在搜索控制器中的show动作
def show
@search = Search.includes(:rate).find(params[:id])
@matches = @search.matches.order(sort_column + " " + sort_direction).page(params[:page])
respond_to do |format|
format.html
format.xml { render :xml => @matches }
format.js
end
end
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我无法弄清楚,我在搜索表单中使用的所有参数(以及其中有很多)都被附加到kaminari分页网址,给我这样的href:
<a href="/searches/145?massive parameter list omitted" data-remote="true" rel="next">2</a>
Run Code Online (Sandbox Code Playgroud)
省略的参数列表太长,以至于它太大而无法成为有效的GET请求,我得到一个414
错误代码.
正如您从上面的搜索 - …
如果Kaminari的URL生成链接返回第一页,则会忽略页面参数.但是,如果省略页面参数,则应用程序旨在选择随机页面.因此,Kaminari的默认行为会阻止以可靠的方式返回第一页.
我已经解决了这个问题,稍后会发布我的解决方案,但我想发布这个问题给后人,我也是Rails的新手,因此我不确定我的解决方案是最好的还是最好的优雅,我对改进和改进感兴趣,如果只是为了我自己的自私教育!
我希望Kaminari能够通过分页控制显示固定计数的分页链接,例如每个导航页面上的10个链接.Kaminari默认在第一页显示6个页面链接,当您继续浏览时页面链接会继续增长,直到您达到9个项目.
我在这里显示,当我第一次加载时,它将总共有5个链接.
当我继续浏览时,它会增长.
在您浏览第5个链接之前,它仅显示9个链接.
即使在使用Kaminari导航的开头或结尾,我如何始终保持链接数为10.我尝试过Kaminari config.window,但这不是我想要的.
我正在使用管理面板的活动管理员.在用户秀页面上,我需要向朋友们展示.我有两个模型User和Friend.
所以问题是我想在"与面板的友谊"中添加分页,即user.friends阻止.
有人可以帮我在一个面板上添加分页吗?这是我正在使用的代码.
show do
attributes_table do
row("Photo") { |user| image_tag(user.facebook_photo_url) }
rows :name, :sex,:city
end
panel 'Friendship with' do
table_for user.friends do
column "" do |friend|
(link_to image_tag(friend.facebook_photo_url('small')), admin_friend_path(friend)) + " ".html_safe + (link_to friend.name, admin_user_path(friend))
end
end
end
active_admin_comments
end
Run Code Online (Sandbox Code Playgroud)
PS:朋友模特实际上是Facebook的朋友,所以我不能在用户模型上使用自我refrential连接(所以不要说使用一个模型而不是两个)我在同一页面上有一些其他面板.我需要确保每个小组都有自己的分页参数名称,这样它们就不会相互冲突.
我用kaminari,并且错误.
的Gemfile:
# gem 'will_paginate', '~> 3.0.6'
# gem 'will_paginate-bootstrap'
gem 'kaminari'
Run Code Online (Sandbox Code Playgroud)
lists_controller.rb
def index
if params[:tag]
@lists = List.tagged_with(params[:tag]).order(created_at: :desc).paginate(page:params[:page], per_page: 3 )
else
@lists = List.all.order(created_at: :desc)
end
end
Run Code Online (Sandbox Code Playgroud)
我也是用户.page params[:page].per(2)
关注.order(created_at: :desc)
但不工作
视图/列表/ index.html.erb
<%= paginate @lists %>
Run Code Online (Sandbox Code Playgroud)
错误在这里
undefined method `total_pages' for #<List::ActiveRecord_Relation:0x007fa2303e3fa8>
Extracted source (around line #26):
</div>
</div>
<%= paginate @lists %>
<div class="container">
<div class="row">
<div class="col-md-8">
Run Code Online (Sandbox Code Playgroud)
我不知道怎么做,我复制关于kaminari的railscast,视频很好,我有一个bug.谢谢,帮助我.
我正在使用Kaminari对以下查询进行分页(尽管我使用will_paginate获得了类似的结果):
Person.joins([:locations=>:location_hour], :friends, :current_images).where(sql_conditions_string).page(params[:page]).per(10)
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,但分页添加数据库调用
SELECT COUNT(*) FROM 'people' INNER JOIN 'location_histories'...
Run Code Online (Sandbox Code Playgroud)
它在整个查询中调用count(*).这需要1.3秒,而原始查询(包括完全相同的连接和.where条件)仅需约0.5秒.
有没有办法让分页只使用原始查询中的计数?最后一次数据库调用是一个很大的性能问题.
我在Rails 3.0.7上.
谢谢!
我最近决定将我的索引引擎从sphinx移植到solr.使用kaminari和thinking_sphinx我决定尝试在太阳黑子中使用通用分页https://github.com/sunspot/sunspot/pull/64/https://github.com/sunspot/sunspot/pull/67,按顺序使用避免移动到will_paginate.
我的搜索处理如下:
@search = Address.search do
fulltext params[:search]
with(:updated_at).greater_than(1.week.ago)
order_by :updated_at, :desc
paginate :page => params[:page], :per_page => 7
end
Run Code Online (Sandbox Code Playgroud)
我的观点与使用thinking_sphinx时的观点相同:
<%= render :partial => 'address' %>
<%= paginate @addresses %>
Run Code Online (Sandbox Code Playgroud)
我的问题是,在更改后,我在尝试执行搜索时不断收到以下错误:
undefined method `current_page' for []:Array
Run Code Online (Sandbox Code Playgroud)
我正在使用最新版本的太阳黑子,据我所知应该让我使用kaminari:
Using sunspot (1.3.0.rc3) from git://github.com/sunspot/sunspot.git (at master)
Using sunspot_rails (1.3.0.rc3) from git://github.com/sunspot/sunspot.git (at master)
Run Code Online (Sandbox Code Playgroud)
这与我的旧think_sphinx设置完美配合,所以我做错了什么?
kaminari ×10
pagination ×6
ruby ×3
activeadmin ×1
ajax ×1
join ×1
performance ×1
rabl ×1
sunspot ×1