ruby-on-rails – 如何在同一视图中呈现两个分页和可共享的集合
在Rails 3.2索引视图中,我渲染了两个部分.
<%= render :partial => 'users/user',:locals => {:users => @happy_users} %> <%= render :partial => 'users/user',:locals => {:users => @sad_users} %> 在部分 <% users.each do |user| %> Show some fields <% end %> <%= will_paginate users %> 分页不起作用. 如果我改变will_paginate来获取一个实例变量,分页工作(但错误的集合) <%= will_paginate @users %> 当调用partial时,如何将locals传递给will_paginate? (我意识到我还需要传递:param_name来使用两个集合.现在我只是想让一个实例工作.) 部分通过index.js.erb呈现 $(".ajaxable-users").html('<%= escape_javascript(render("users/user")) %>'); 控制器看起来像 def index @users = User.scoped.paginate(:page => params[:page],:per_page => 5) @happy_users = User.happy_scope.paginate(:page => params[:page],:per_page => 5) @sad_users = User.happy_scope.paginate(:page => params[:page],:per_page => 5) respond_to do |format| format.html # index.html.erb format.xml { render :xml => @users } format.json { render :json => @users } format.js end end 谢谢你的任何想法. 解决方法
>您需要确保控制器知道您按哪个列表的页面链接.我们通过将一个参数传递给will_paginate页面链接生成器来完成此操作.
>刷新任一列表的分页时,您需要确保js更新正确的html标记.我们通过将分页包装在依赖于情绪的:) div标签中来完成此操作. >因为我们共享部分,我们需要确保在控制器中设置心情和正确的集合,并从索引视图(html和js)传递给局部部分. >最后确保你重绘分页后你的ajax遥控器会被拿起(这是奖金) 所以,根据请求情绪参数设置控制器实例变量 >请注意,此代码还会为您节省一些数据库调用,因为如果您只是对悲伤用户进行了分析,则无需检索快乐用户或所有用户. . # controller def index @mood = params[:mood] @mood_users = @happy_users = User.happy_scope.paginate(:page => params[:page],:per_page => 5) if @mood.blank? || @mood == 'happy' @mood_users = @sad_users = User.happy_scope.paginate(:page => params[:page],:per_page => 5) if @mood.blank? || @mood == 'sad' respond_to do |format| format.html # index.html.erb format.xml { render :xml => @users } format.json { render :json => @users } format.js end end 确保我们将正确的本地人分发给部分人: # index.html.erb <%= render :partial => 'users/user',:locals => {:users => @happy_users,:mood => 'happy' } %> <%= render :partial => 'users/user',:locals => {:users => @sad_users,:mood => 'sad' } %> 使部分情绪敏感,允许不同的div标签id.也请求心情请求网址. # users/user partial <div id='<%= "#{mood || ''}users"%>'> <% users.each do |user| %> Show some fields <% end %> <%= will_paginate users,:params => { :mood => mood } %> </div> 这个js允许根据按下的分页链接刷新不同div中的不同集合. # index.js.erb $("#<%= @mood %>users").html(' <%= escape_javascript(render(partial: "users/user",locals: { users: @mood_users,mood: @mood })) %> '); 对于不显眼的ajax链接,你需要分页. # in a generic js $(document).ready(function () { $(".pagination").find("a").livequery(function () { $(this).attr("data-remote",true); }); }); 请注意,如果未启用javascript,我们甚至可以使用该解决方案,并且我们会依赖html.在这种情况下,应重新显示两个部分以允许不同的页面. 修改后的代码也可以处理格式化的JS FALLBACK到HTML 调节器 # controller def index @mood = params[:mood] @happy_page = @mood == 'happy' ? params[:page] : params[:happy_page] @sad_page = @mood == 'sad' ? params[:page] : params[:sad_page] @mood_users = @happy_users = User.happy_scope.paginate(:page => @happy_page,:per_page => 5) if !request.xhr? || @mood == 'happy' @mood_users = @sad_users = User.happy_scope.paginate(:page => @sad_page,:per_page => 5) if !request.xhr? || @mood == 'sad' @mood_users = @users = User.scoped.paginate(:page => params[:page],:per_page => 5) if @mood.blank? respond_to do |format| format.html # index.html.erb format.xml { render :xml => @users } format.json { render :json => @users } format.js end end 将新视图转发到部分本地 # index.html.erb <%= render :partial => 'users/user',:mood => 'happy',:happy_page => @happy_page,:sad_page => @sad_page } %> <%= render :partial => 'users/user',:mood => 'sad',:sad_page => @sad_page } %> 我们只需要在这里传递这个就不会得到部分未定义的方法. # index.js.erb (fixed HTML syntax) $("#<%= @mood %>users").html(' <%= escape_javascript(render(partial: "users/user",mood: @mood,:sad_page => @sad_page })) %> '); 如果单击悲伤页面链接,这将在参数中保留快乐页面,反之亦然. # users/user partial <div id='<%= "#{mood || ''}users"%>'> <% users.each do |user| %> Show some fields <% end %> <%= will_paginate users,:params => { :mood => mood,:happy_page => happy_page,:sad_page => sad_page %> </div> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |