4 Stimmen

ActiveRecord und Sortierung nach Assoziation

Ich habe eine einfache AR-Assoziation wie diese:

Question    has_many :answers

Answer      belongs_to :question

with
  `question_id` int(11) NOT NULL,
  `is_accepted` tinyint(1) DEFAULT NULL,

in der Antwort. Ich werde nur eine is_accpeted-Antwort haben und frage mich, ob es eine einfache Möglichkeit gibt, diese nach oben zu sortieren (nur eine Reihenfolge nach)?

thx

Bearbeiten: Hier ist meine Antwortklasse:

class Answer < ActiveRecord::Base
    belongs_to :question 
end

17voto

Matthew Rudy Punkte 16524

Die Antwort liegt in Ihrem Schema

`is_accepted` tinyint(1)

Für viele Datenbanken speichert ActiveRecord Boolesche Werte true y false als 1 y 0

also

question = Question.find(23)
questions.answers.order("is_accepted DESC")

sollte das tun, was Sie wollen.

Sie können dies auch als Standardauftrag hinzufügen.

class Question
  has_many :answers, :order => "is_accepted DESC" # rails 3
  has_many :answers, -> { order "is_accepted DESC" } # rails 4
end

jetzt question.answers beginnt immer mit der Angabe "is_accepted".

2voto

Harish Shetty Punkte 63187

Hinzufügen einer has_one Verein auf der Question clase

class Question
  has_many :answers
  has_one  :accepted_answer, :class_name => "Answer", :conditions => {:is_accepted => true}
end

class Answer
  belongs_to :question
end

Jetzt

q1.answers # returns an array of Answers objects
q1.accepted_answer # returns the accepted answer (if any)

Um die Antworten nach akzeptiertem Status zu sortieren, ändern Sie die Reihenfolge der Assoziationen:

has_many :answers,:order => "is_accepted DESC"

Jetzt

q1.answers # returns the accepted answer on the top

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X