2017-12-15 1 views
0

In Schienen 5 verwende ich pg (Postgresql) für eine Back-End-Datenbank. Jetzt möchte ich über Schienen abfragen und die Daten bekommen. Wie kann ich IN und ORDER(:created_at, :desc) Bedingungen in einer Abfrage verwenden.Rails 5 - Wie postgresql Abfrage zu verwenden?

In Controller,

PAGE_LIMIT = 5 
posts = Post.where("user_id IN (?)", [1,2,3]).order(created_at: :desc) 
posts = posts.paginate(params[:page], PAGE_LIMIT) 

Ich bin eine benutzerdefinierte Methode schreiben wie,

def paginate(page, limit = 5) 
    page = page ? page.to_i : 1 
    limit = limit.to_i 
    offset = (page - 1) * limit 
    self.offset(offset).limit(limit) 
end 

Ich bin neu in postgresql. Bitte helfen Sie mir, dieses Problem zu lösen?

+0

Shruthi R in jedem Fall, dass Sie Ihren Code teilen können, so dass ich Ihnen helfen kann, bekommen, was genau Sie wollen, ich denke, die Antwort weiter unten wird Ihnen helfen. :) – Gabbar

Antwort

1

nehme an, Sie User Modell haben und Sie möchten Benutzer erhalten, die id in [1,2,3]

User.where("id IN (?)", [1,2,3]).order(created_at: :desc) 

für dynamischer zu gestalten hat

x = [1,2,3] 
name = "testing123" 
User.where("name = ? AND id IN (?)", name, x).order(created_at: :desc) 

für weitere Informationen können Sie sehen Active Record Query

es funktioniert mit Paginierung für Array-Änderungen, die hier gemacht werden müssen

modifizierte Antwort

PAGE_LIMIT = 5 
posts_arr = Post.where("user_id IN (?)", [1,2,3]).order(created_at: :desc) 
posts = Post.where(id: posts_arr.map(&:id)) #here to get active records of posts to make it working for custom pagination 
posts = posts.paginate(params[:page], PAGE_LIMIT) 
+1

Wie wäre es nur mit 'User.where (id: x) .order (created_at:: desc)' oder 'User.where (id: x, name: name) .order (created_at:: desc)'? Es scheint sauberer und idiomatischer, IMO. – jvillian

+0

Ja, es ist sauberer Code, aber ich erklärte nur, wie man IN verwendet, warum ich ID in verwendet .. – Gabbar

+0

Fair genug, und schön gemacht. Stört es dich, wenn ich es in deine Antwort bearbeite? – jvillian

Verwandte Themen