Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 rails集合中的第一个和最后一个对象_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 rails集合中的第一个和最后一个对象

Ruby on rails 3 rails集合中的第一个和最后一个对象,ruby-on-rails-3,Ruby On Rails 3,在我的应用程序中,我有一个“Students”部分,它将@Students集合传递给一个“student”部分。这些最终在我的索引页面上显示为学生的图片。当用户点击一张图片时,我弹出一个框,里面有学生的照片和一些文字。现在,我有一个previous/next按钮,允许用户在学生中循环。我用插件实现了循环…只是一个简单的ajax调用来加载下一个/上一个对象。我的问题是,我无法检测到我何时处于最后一条(或第一条)记录。我需要一种可能在第一个和最后一个对象上设置url参数的方法。所以看起来是这样的:w

在我的应用程序中,我有一个“Students”部分,它将@Students集合传递给一个“student”部分。这些最终在我的索引页面上显示为学生的图片。当用户点击一张图片时,我弹出一个框,里面有学生的照片和一些文字。现在,我有一个previous/next按钮,允许用户在学生中循环。我用插件实现了循环…只是一个简单的ajax调用来加载下一个/上一个对象。我的问题是,我无法检测到我何时处于最后一条(或第一条)记录。我需要一种可能在第一个和最后一个对象上设置url参数的方法。所以看起来是这样的:www.mysite.com/students/15?last=true

我找不到一个干净的方法来做这件事。我也不确定我的想法是否正确。我应该附加url参数吗?或者我应该在从模型中检索属性后,以某种方式修改对象以添加其他属性吗

多谢各位

[编辑]

只是想让这更清楚一点。 当我弹出学生灯箱时,我有两个链接:上一个链接(链接到上一条记录)和下一个链接到下一条记录。我正在使用jquery$.load方法发出ajax请求,并在单击“上一步”或“下一步”时将所需数据加载到lightbox中的一个div中

$('previous')。单击( $('mydiv').load('url of previous student'); );

我通过在初始弹出窗口中遍历dom树来获取“上一个/下一个学生的url”。我存储这些,以便再次参考它们


我的问题是,我不知道我是第一名还是最后一名。我需要知道这一点,以便禁用“上一步/下一步”按钮。我想我可以通过rails/ruby或javascript来实现这一点。最初,我认为通过在链接或上一个/下一个学生(指示他们是第一个还是最后一个)上添加url参数,我可以在rails中检测到这一点,并执行简单的if/else来禁用链接。但我一直在试图用我提到的部分的方式来做这件事。

你需要最后一页还是@students的最后一个学生? 我使用gem将页面列表和简单的JS“ajax”刷新下一页。您可以使用此gem并将每页对象数设置为1,例如:

@students = Student.order(sort_column + " " + sort_direction).paginate(:per_page => 1, :page => params[:page])
示例“ajax”学生/index.js:

$('tbody').append('<%= j render(@students) %>');
<% if @students.next_page %>
  $('.pagination').replaceWith('<%= j will_paginate(@students) %>');
<% else %>
  $('.pagination').remove();
<% end %>

我从我的圣经中学到;-)

嗯,我是用我的方式来获得灵感的,也许可以帮助你: 学生/索引 带有ajax加载列表的经典索引文件,将对我在上面编写的代码进行分页和编码。每个学生都有带有链接的图像,链接有href类似于/student/4和remote:true

学生节目控制员

@student = Student.find(params[:id])
学生展示js文件 经典js渲染“学生”

学生_student.html.erb 您的视图和两个视图帮助器:上一个帮助(params[:id])和下一个帮助(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

我现在没有时间,但如果这个解决方案对您没有帮助,您可以明天给我写信,我将创建示例应用程序来测试我的解决方案并与您协作

谢谢你的评论,但我想我可能解释得不够清楚。我已经编辑了上面的描述。你可以使用will paginate。Gem“will_paginate”测试当前页面并显示/隐藏下一页链接。如果您可以编写自己的代码,我认为您必须测试ID,如果student.ID==student.last.ID隐藏下一页链接,那么在本例中“student”是数组,对吗?但我的问题是,我使用的是一个分部,它将一个集合发送给另一个进行渲染的分部。因此,在第二部分中,我再也无法访问该集合,因此我无法测试整个集合以确定我所处的记录。我现在想我可能需要在第一条/最后一条记录上添加一个虚拟属性,但这似乎已经结束了对不起,对于commentHey@quatermain来说太长了,我非常感谢您的帮助。我会试试看,然后告诉你。谢谢
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