ruby – 不需要的表单参数被附加到分页链接

前端之家收集整理的这篇文章主要介绍了ruby – 不需要的表单参数被附加到分页链接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个页面,用于通过提交数据使用提供的表单搜索列表.表单参数通过ajax(post request)提交,在搜索表中创建一个新记录,然后通过该记录的显示操作显示列表(动态地,在表单提交的同一页面上).

结果有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 %>

请注意,页面动态地包含分页链接.所以,当我做新的搜索并获得新的列表时,服务器将重新呈现分页链接.

这是我在搜索控制器中的展示动作

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

由于某种原因,我无法弄清楚,我在搜索表单中使用的所有参数(并且有很多)被附加到kaminari分页网址,给我这样的hrefs:

<a href="/searches/145?massive parameter list omitted" data-remote="true" rel="next">2</a>

省略的参数列表太长,以至于无法成为有效的GET请求,我得到414错误代码.

搜索中可以看到 – >显示我以上的动作,分页链接不必附上所有这些信息.他们所需要的就是路由,id和页码.

如何防止这种情况发生?

顺便说一下,我试过设置:method =>发表在kaminari选项.似乎没有帮助我正在使用kaminari v 0.12.4(最新)和Rails 3.1.rc4.

解决方法

大概的概念

您可以通过编辑分页部分来修复此问题,以手动从URL中删除参数,然后添加页面参数.我知道这是一个黑客,但是如果分页被打破,就像解决这个问题的最快方法(就像我这样).

我正在从GitHub bug report for this issue发布的解决方案扩展.

您必须编辑5个分页链接部分中的每一个:_page.html.erb(通过数字),_first_page.html.erb和_last_page.html.erb,_prev_page.html.erb和_next_page.html.erb.

您可以从partials:current_page,page,num_pages中的可用局部变量中找到所需的页码.

具体说明

如果您还没有,请通过运行rails g kaminari:views default来生成应用程序中的分页部分

然后编辑部分如下:

#_page.html.erb
<%
 unless page.current?
   url = url.split('?')[0] + '?page=' + page.to_s
 end
%>

<span class="page<%= ' current' if page.current? %>">
  <%= link_to_unless page.current?,url,opts = {:remote => remote,:rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
</span>

# _first_page.html.erb
<span class="first">
  <% url = url.split('?')[0] + '?page=1' %>
  <%= link_to_unless current_page.first?,raw(t 'views.pagination.first'),:remote => remote %>
</span>

# _prev_page.html.erb
<span class="prev">
  <% url = url.split('?')[0] + '?page=' + (current_page.to_i - 1).to_s %>
  <%= link_to_unless current_page.first?,raw(t 'views.pagination.prevIoUs'),:rel => 'prev',:remote => remote %>
</span>

# _next_page.html.erb
<span class="next">
  <% url = url.split('?')[0] + '?page=' + (current_page.to_i + 1).to_s %>
  <%= link_to_unless current_page.last?,raw(t 'views.pagination.next'),:rel => 'next',:remote => remote %>
</span>

# _last_page.html.erb
<span class="last">
  <% url = url.split('?')[0] + '?page=' + num_pages.to_s %>
  <%= link_to_unless current_page.last?,raw(t 'views.pagination.last'),{:remote => remote} %>
</span>

猜你在找的Ruby相关文章