如何从ID列表中执行上一个/下一个

时间:2014-08-06 19:33:18

标签: ruby ruby-on-rails-3

好的,我有一个记录列表,我想在编辑页面上创建下一个/上一个链接,该链接将转到下一个或上一个ID

我从这个

获取数据库中的记录列表
@leads = Lead.where("user_id = ?", current_user.id).where(:completed => false)

[#<Lead id: 954, name: "Matson/DLI", user_id: 1, completed: false>, 
 #<Lead id: 1454, name: "48 State Freight", user_id: 1, completed: false>, 
 #<Lead id: 1900, name: "FederalLogisticsSales",  user_id: 1, completed: false>] 

id是随机的。

如果我的主管#1454处于有效状态,我想让底部的链接转到954 or 1900

这些将转到下一个和上一个ID,但不会从我的列表中

<a href="/leads/<%= @lead.id - 1 %>/edit"><--- Previous</a>

<a href="/leads/<%= @lead.id + 1 %>/edit">Next ---></a>

不,这对我不起作用......会有1000多条记录

@leads.last   or    @leads.first

更新到Vasseurth的帖子

我得到了

   @leads[index]
undefined local variable or method `index' 

    @leads.class
    => ActiveRecord::Relation 

所以我做了这个

leads = []
    leads << @leads
    leads.class
    => Array

    leads[index]
undefined local variable or method `index' 

2 个答案:

答案 0 :(得分:0)

从该命令和生成的响应中,@leads看起来像一个数组。这意味着您可以通过@leads[index]对其进行索引。也许有你的链接,链接到下一个@leads[index+1]或前一个@leads[index-1]将完成你想要做的事情。 (当然,你必须确保你不能点击第一个条目的前一个或最后一个的下一个条目。)

另一点,绝对可以使用rails link_to标记。你进行链接的方式似乎有些偏差(虽然不一定是错误的)。 Somelinke喜欢:

<%= link_to 'Next', edit_lead_path(@leads[index+1]) %>
<%= link_to 'Previous', edit_lead_path(@leads[index-1]) %>

将创建相同的链接,但在&#34; rails&#34;办法。

让我知道结果如何。

澄清:

第一种方法(没有<<)是正确的,您还没有定义index。 我假设您在潜在客户show页面上显示此内容。因此,您必须定义并正确设置index

答案 1 :(得分:0)

在编辑页面上,您拥有当前正在编辑的潜在客户的ID,让我们说它是1454,所以params[:id] = 1454

在控制器的编辑方法中,您可以使用以下内容:

@next_lead = Lead.where("user_id = ?", current_user.id).where(:completed => false).where("id > ?",params[:id]).first
@previous_lead = Lead.where("user_id = ?", current_user.id).where(:completed => false).where("id < ?",params[:id]).last

可能不是最有效但它会起作用。