在我的申请中,我有一个“学生”部分,将@students的集合传递给“学生”部分。这些最终显示在我的索引页面上作为学生的图像。当用户点击图片时,我会弹出一个包含学生照片和一些文字的框。现在,我有一个上一个/下一个按钮,允许用户循环学生。我实现了循环w / out插件...只是一个简单的ajax调用来加载下一个/上一个对象。我的问题是,当我在最后(或第一次)记录时,我无法检测到。我需要一种方法来设置第一个和最后一个对象的url参数。所以它看起来像这样:www.mysite.com/students/15?last=true
我找不到干净的方法来做到这一点。我也不确定我是否正确地思考这个问题。我应该附加url参数吗?或者我应该以某种方式修改对象,以便在从模型中检索它们之后添加其他属性?
谢谢。
[编辑]
只是想让这个更清楚一些。 当我弹出学生灯箱时,我有2个链接:上一个(链接到上一个记录)和下一个链接到下一个记录。我正在使用jquery $ .load方法发出一个ajax请求并将我想要的数据加载到我的灯箱中的div中,每当我点击上一个或下一个。
$( '以前')。点击( $('mydiv')。load('前学生的网址'); );
我通过在最初的弹出窗口走过dom树来获得'上一个/下一个学生的网址'。我存储了这些,所以我可以再次参考它们。
我的问题是,当我在列表中的第一个学生或最后一个学生时,我无法分辨。我需要知道这一点,所以我可以禁用上一个/下一个按钮。我想我可以通过rails / ruby或通过javascript来做到这一点。最初,我认为通过在链接或上一个/下一个学生上添加url参数(以指示它们是第一个还是最后一个),然后我可以在rails中检测到这个并执行简单的if / else来禁用链接。但是我一直试图以我指的是部分的方式来做这件事。
答案 0 :(得分:1)
您需要最后一页,还是@students的最后一位学生? 我使用gem will_paginate列出页面和简单的JS“ajax”用于刷新下一页。您可以使用此gem并将每页的对象设置为1,例如:
@students = Student.order(sort_column + " " + sort_direction).paginate(:per_page => 1, :page => params[:page])
示例“ajax”students / index.js:
$('tbody').append('<%= j render(@students) %>');
<% if @students.next_page %>
$('.pagination').replaceWith('<%= j will_paginate(@students) %>');
<% else %>
$('.pagination').remove();
<% end %>
coffescript激活它:
if $('.pagination').length
$(window).scroll ->
url = $('.pagination .next_page').attr('href')
if url && $(window).scrollTop() > $(document).height() - $(window).height() - 230
$('.pagination').text("Načítavam...")
$.getScript(url)
$(window).scroll()
我从我的圣经中学到它;-) RailsCasts - Ryan Bates
答案 1 :(得分:1)
学生秀控制器
@student = Student.find(params[:id])
学生显示js文件 经典的js渲染“学生”
student _student.html.erb 你的观点和两个视图助手:prev_help(params [:id])和next_help(params [:id])
助手:
def prev_help(id)
@student = Student.find(id - 1)
link_to("Prev". @student ) if @student.nil?
end
def next_help(id)
@student = Student.find(id + 1)
link_to("Prev". @student ) if @student.nil?
end
我现在没有时间,但是如果这个解决方案对您没有帮助,您明天可以写信给我,我会创建示例应用来测试我的解决方案并与您合作。