Rails bester Weg, um das vorherige und nächste aktive Datensatzobjekt zu erhalten

Ich muss die vorherigen und nächsten aktiven Datensatzobjekte mit Rails abrufen. Ich habe es getan, aber ich weiß nicht, ob es der richtige Weg ist, das zu tun.

Was ich habe:

Regler

@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)}

So ist das Problem hier, dass ich zu meiner Datenbank gehen und all diese IDs abrufen muss, um zu wissen, wer der vorherige und der nächste ist.

Versucht, den Edelstein zu verwenden order_query, aber es hat bei mir nicht funktioniert und ich habe festgestellt, dass es in die Datenbank geht und alle Datensätze in dieser Reihenfolge abruft. Deshalb habe ich dasselbe getan, aber nur die IDs abgerufen.

Alle Lösungen, die ich gefunden habe, waren mit einfachen Bestellanfragen. Bestellung nach ID oder so etwas wie einem Prioritätsfeld.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage