如何在show view中添加上一个/下一个链接?

时间:2011-02-20 14:42:40

标签: ruby-on-rails activerecord

我正在尝试在我的节目视图中添加Prevous / Next链接。这是模型:

Position
belongs_to :skill

Skill
has_many :positions, :order => 'salary desc, id desc'

位置/显示视图:

<%= link_to("Previous", @position.previous) if @position.previous %>
<%= link_to("Next", @position.next) if @position.next %>

position.rb (为了可读性添加了新行)

def next
  self.class
  .where("skill_id = ? AND salary <= ? AND id < ?", skill_id, salary, id)
  .order("salary desc, id desc").first
end

这不符合我的要求。记录应首先按薪水排序,而不是按身份排序。

我认为will_paginate不会帮助我,因为它只适用于集合(在展示视图中不起作用)

3 个答案:

答案 0 :(得分:0)

你应该看一下paginate gem它为你做的所有逻辑并创建你的视图链接https://github.com/mislav/will_paginate

答案 1 :(得分:0)

好的,试着看看这个宝石:http://metautonomo.us/projects/metawhere/

似乎问题是你的SQL mojo并没有达到目标,但由于我绝对没有SQL mojo,我不知道为什么你的方法不起作用。

Metawhere允许您使用非常精确的ruby代码来生成复杂的SQL查询。从项目主页中,它给出了复杂订单子句的示例:

Article.order(
    :title.desc,
    :comments => [:created_at.asc, :updated_at]
  ).joins(:comments)

所以,我认为如果你使用metawhere,你可以简单地将它添加到你的where子句中:

... :order => [:id.desc, :salary.desc] ...

或将其链接为.order()

我希望有所帮助!

答案 2 :(得分:0)

我找到了解决方案:)它相当长,但它确实有效:

where("skill_id = ? AND salary = ? AND id < ?
       OR 
       skill_id = ? AND salary < ?",
       skill_id, salary, id, skill_id, salary
     )
     .order("salary desc, id desc").first