0

我有一个模范。在studentsController中,我选择了一组学生。我想在第一条和最后一条记录上附加一个标志。

我将显示部分学生列表,如下所示:students/_student并且当用户点击每个学生时,他们会得到一个弹出窗口。

我想使用该标志来确定该学生是否是第一个/最后一个,以便我可以向 url 添加一个查询参数。例如,当您将鼠标悬停在第一个学生上时,URL 将如下所示:localhost:3000/student/1?location=first

通过部分显示时,部分中不存在集合,所以我不能只做这样的测试:student.first?

有任何想法吗?谢谢你。

[编辑]。这最初是对@neils 的回复,但我想我会把它放在那里:它可以工作,但是我还有另一个问题。因为我使用的是“自动滚动”功能,当用户向下滚动页面时会加载更多学生(一次 3 个),“第一个”和“最后一个”被添加到每个学生的第一个和第三个学生row 而不是集合的实际第一个和最后一个。我进行自动滚动的方式:我使用 $.getScript 来请求index.js.erb文件。该文件像这样渲染students/_student渲染 @students,并附加到容器 div。我在该模板(students/_student)中渲染 url,因此参数每第一次/第三次渲染一次。

4

3 回答 3

2

如果需要,您可以继续render @students通话。请注意,student_counter当您这样做时,您会神奇地在您的部分中为您提供一个助手。现在在您的部分中,您可以通过助手或装饰器student_counter比较@students.size并设置您link_to的 's 。:location=>'first/last'

于 2012-09-05T03:50:22.203 回答
1

假设您已经将一些学生集合分配给控制器中的@students ( Student.all, Student.where(some_conditions), 不管...),您可以执行以下操作:

添加attr_accessor :flag到您的Student模型:

class Student < ActiveRecord::Base
  attr_accessor :flag
  #... rest of your code
end

这会在您的 Student 实例上创建一个非 ActiveRecord 属性。

比你可以在控制器中做一些事情,比如:

@students[0].flag = 'first'
@students[-1].flag = 'last'

然后在您的视图中使用该信息。不是很优雅,但它应该可以解决问题。

编辑: 详细说明以上内容,使其更清楚。 EDIT2: 修正错误,attr_accessor是正确的方法,而不是attr_accessable......

于 2012-09-04T18:30:36.000 回答
0

我不确定我是否正确理解了你的问题,但我会试一试。

假设您将@students其用作列表的实例变量,您可以将学生列表传递给您的部分,如下所示:

<%= render 'students', :locals => {:students => @students} %>

在 内部students/_students,您可以遍历列表并使用以下方法确定它们的位置each_with_index

<% students.each_with_index do |student, index| %>
于 2012-09-04T19:00:08.640 回答