gpt4 book ai didi

javascript - will_paginate 页面链接问题

转载 作者:数据小太阳 更新时间:2023-10-29 05:13:24 25 4
gpt4 key购买 nike

我目前有一个评论模型,在微博下发表,并且都显示在同一页面上。问题是两者都显示在同一页面上并且都已分页,我正在尝试采用 facebook 方法进行微张贴。这是下面的问题:

两个分页的链接变成了这个 href="/users/2?page=2" 而不是 href="/users/2/micropost?page=2"href="/users/2/comment?page=2"。我不确定如何着手解决这个问题。这是我的一些代码。非常感谢所有建议!

微博渲染 HTML

<table class="microposts">
<% if microposts.any? %>
<%= render microposts %>
<%= will_paginate microposts, :page_links => false %>
<% else %>
<div class="EmptyContainer"><span class='Empty'>Add a thread!</span></div>
<% end %>
</table>

评论部分 HTML

<div id='CommentContainer-<%= micropost.id%>' class='CommentContainer Condensed2'>
<div class='Comment'>
<%= render :partial => "comments/form", :locals => { :micropost => micropost } %>
</div>
<div id='comments'>
<% comments = micropost.comments.paginate(:per_page => 5, :page => params[:page]) %>
<%= render comments %>
<%= will_paginate comments, :class =>"pagination" %>
</div>
</div>

显示页面的用户 Controller

  def show
@user = User.find(params[:id])
@comment = Comment.find(params[:id])
@micropost = Micropost.new
@comment = Comment.new
@comment = @micropost.comments.build(params[:comment])
@comments = @micropost.comments.paginate(:page => params[:page], :per_page => 5)
@microposts = @user.microposts.order('created_at DESC').paginate(:per_page => 10, :page => params[:page])
respond_to do |format|
format.html
format.js
end
end

最佳答案

问题在于为每个页面创建 url 的 will_paginate 方式(它与 jQuery 没有任何关系)。

根据设计,will_paginate 会尽力猜测用户所在页面的基本 url 是什么(在内部它使用 Controller /操作来做到这一点)。然后将该基本 url 与使用 :params 和连续页码传递给 will_paginate 帮助器的任何额外参数组合。

现在(will_paginate 3.0.3),为了覆盖此默认行为,您需要编写自定义 LinkRenderer 类。下面是此类的示例 - 它使用新的额外选项 :base_link_url 可以传递给 will_paginate View 助手。然后在创建分页链接时将传递的字符串用作基础。如果未传递 :base_link_url 选项,它将回退到默认行为。

将以下类放在 Rails 可以加载的地方(例如/lib,前提是您已将/lib 添加到 application.rb 中的自动加载路径):

# custom_link_renderer.rb
class CustomLinkRenderer < WillPaginate::ActionView::LinkRenderer
def prepare(collection, options, template)
@base_link_url = options.delete :base_link_url
@base_link_url_has_qs = @base_link_url.index('?') != nil if @base_link_url
super
end

protected
def url(page)
if @base_link_url.blank?
super
else
@base_url_params ||= begin
merge_optional_params(default_url_params)
end

url_params = @base_url_params.dup
add_current_page_param(url_params, page)

query_s = []
url_params.each_pair {|key,val| query_s.push("#{key}=#{val}")}

if query_s.size > 0
@base_link_url+(@base_link_url_has_qs ? '&' : '?')+query_s.join('&')
else
@base_link_url
end
end
end
end

用法:

# in your view
will_paginate collection, :renderer => CustomLinkRenderer, :base_link_url => '/anything/you/want'

现在回到您的案例。到这个时候,您可能会看到解决方案 - 通过为这两个 will_paginate 小部件传递不同的 :base_link_url 选项,您可以在一个页面上使用不同的基本 url。

关于javascript - will_paginate 页面链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9563113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com