Rails le meilleur moyen d'obtenir l'objet d'enregistrement actif précédent et suivant

J'ai besoin d'obtenir de la précédente et de la suivante active record des objets avec des Rails. Je l'ai fait, mais ne sais pas si c'est la bonne façon de le faire.

Ce que j'ai:

Contrôleur:

@product = Product.friendly.find(params[:id])

order_list = Product.select(:id).all.map(&:id)

current_position = order_list.index(@product.id)

@previous_product = @collection.products.find(order_list[current_position - 1]) if order_list[current_position - 1]
@next_product = @collection.products.find(order_list[current_position + 1]) if order_list[current_position + 1]

@previous_product ||= Product.last
@next_product ||= Product.first

product_model.rb

default_scope -> {order(:product_sub_group_id => :asc, :id => :asc)}

Donc, le problème, ici, c'est que j'ai besoin d'aller à ma base de données et d'obtenir tous les identifiants de savoir qui est le précédent et le suivant.

Essayé d'utiliser la gem order_querymais il ne fonctionne pas pour moi et j'ai constaté que cela se passe de la base de données et récupérer tous les enregistrements dans l'ordre, donc c'est pourquoi j'ai fait de même mais qui ne boit que de l'ids.

Toutes les solutions que j'ai trouvé était simple ordre des requêtes sur. Order by id ou quelque chose comme un domaine prioritaire.

source d'informationauteur William Weckl | 2014-09-04