我正在尝试在我的节目视图中添加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不会帮助我,因为它只适用于集合(在展示视图中不起作用)
答案 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