ActiveRecord和关联排序

tim*_*one 4 activerecord ruby-on-rails

我有这样一个简单的AR协会:

Question    has_many :answers

Answer      belongs_to :question

with
  `question_id` int(11) NOT NULL,
  `is_accepted` tinyint(1) DEFAULT NULL,
Run Code Online (Sandbox Code Playgroud)

在答案中.我只有一个is_accpeted答案,我想知道是否有一个容易排序到顶部(只是一个订单)?

谢谢

编辑:这是我的答案课:

class Answer < ActiveRecord::Base
    belongs_to :question 
end 
Run Code Online (Sandbox Code Playgroud)

Mat*_*udy 16

答案在您的架构中

`is_accepted` tinyint(1)
Run Code Online (Sandbox Code Playgroud)

对于许多数据库,ActiveRecord存储布尔值truefalseas 10

所以

question = Question.find(23)
questions.answers.order("is_accepted DESC")
Run Code Online (Sandbox Code Playgroud)

应该做你想做的事.

您也可以将其添加为默认订单.

class Question
  has_many :answers, :order => "is_accepted DESC" # rails 3
  has_many :answers, -> { order "is_accepted DESC" } # rails 4
end
Run Code Online (Sandbox Code Playgroud)

现在question.answers将始终首先以"is_accepted"开头.

  • 在Rails 4中,正确的方法是has_many:answers, - > {order"is_accepted DESC"} (4认同)