ActiveRecord и сортировка по ассоциации - PullRequest
4 голосов
/ 11 сентября 2011

У меня есть простая ассоциация AR, подобная этой:

Question    has_many :answers

Answer      belongs_to :question

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

в ответе. У меня будет только один ответ is_accpeted, и мне интересно, есть ли возможность легко отсортировать его по началу (просто по порядку)?

ТНХ

Edit: вот мой класс ответа:

class Answer < ActiveRecord::Base
    belongs_to :question 
end 

Ответы [ 2 ]

16 голосов
/ 11 сентября 2011

ответ в вашей схеме

`is_accepted` tinyint(1)

Для многих баз данных ActiveRecord хранит логические значения true и false как 1 и 0

так

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

должен делать то, что вы хотите.

Вы также можете добавить это как порядок по умолчанию.

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

сейчас question.answers всегда будет начинаться с «is_accepted» первым.

2 голосов
/ 11 сентября 2011

Добавление ассоциации has_one в класс * Question

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

class Answer
  belongs_to :question
end

Сейчас

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

Чтобы отсортировать ответы по принятому статусу, измените порядок ассоциации:

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

Сейчас

q1.answers # returns the accepted answer on the top
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...