Как добавить Предыдущие / Следующие ссылки в режиме просмотра? - PullRequest
0 голосов
/ 20 февраля 2011

Я пытаюсь добавить ссылки «Предыдущая / Следующая» в моем представлении. Вот модель:

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

Это не делает то, что я хочу. Записи должны быть упорядочены сначала по зарплате, а затем по id.

Я думаю, что will_paginate мне не поможет, потому что это только для коллекций (не будет работать в режиме просмотра)

Ответы [ 3 ]

0 голосов
/ 20 февраля 2011

Хорошо, попробуйте посмотреть на этот камень: http://metautonomo.us/projects/metawhere/

Кажется, проблема в том, что ваш SQL mojo не совсем намечен, но, поскольку у меня нет абсолютно никакого SQL mojo, я не знаю, почему ваш подход не работает.

Metawhere позволяет использовать очень точный код ruby ​​для генерации сложных запросов SQL. На домашней странице проекта приведен пример сложных пунктов заказа:

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

Итак, я думаю, что если бы вы использовали мета, вы могли бы просто добавить это в ваше where предложение:

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

или включите его как .order().

Надеюсь, это поможет!

0 голосов
/ 20 февраля 2011

Я нашел решение :) Это довольно долго, но работает:

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
0 голосов
/ 20 февраля 2011

Вы должны взглянуть на самоцвет paginate, который выполняет всю логику за вас и создает ссылки для ваших представлений https://github.com/mislav/will_paginate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...