我有一堆的。
我想做的是把每个问题的答案按两个步骤排列:
如果有可接受的答案,请先返回该答案,然后。。。
返回其余答案,Answers
如果α1不存在,则默认为2。
这是我试过的,但没有成功:

[21] pry(main)> q.answers.order(:accepted, created_at: :desc)
[23] pry(main)> q.answers.order(accepted: true, created_at: :asc).inspect
ArgumentError: Direction "true" is invalid. Valid directions are: [:asc, :desc, :ASC, :DESC, "asc", "desc", "ASC", "DESC"]
from /gems/activerecord-5.0.0.rc1/lib/active_record/relation/query_methods.rb:1164:in `block (2 levels) in validate_order_args'
[24] pry(main)> q.answers.order(accepted: "true", created_at: :asc).inspect
ArgumentError: Direction "true" is invalid. Valid directions are: [:asc, :desc, :ASC, :DESC, "asc", "desc", "ASC", "DESC"]
from gems/activerecord-5.0.0.rc1/lib/active_record/relation/query_methods.rb:1164:in `block (2 levels) in validate_order_args'

我怎样才能做到这一点?
编辑1
这是一个回答Question的例子:
[26] pry(main)> q.answers.first
=> #<Answer:0x007f997d7a5a80
 id: 69,
 body:
  "public static Process CreateProcessAsUser(string filename, string args)\r\n {\r\n     var hToken = WindowsIdentity.GetCurrent().Token;\r\n     var hDupedToken = IntPtr.Zero;\r\n\r\n     var pi = new PROCESS_INFORMATION();\r\n     var sa = new SECURITY_ATTRIBUTES();\r\n     sa.Length = Marshal.SizeOf(sa);\r\n\r\n     try\r\n     {\r\n         if (!DuplicateTokenEx(\r\n                 hToken,\r\n                 GENERIC_ALL_ACCESS,\r\n                 ref sa,\r\n                 (int)SECURITY_IMPERSONATION_LEVEL.SecurityIdentification,\r\n                 (int)TOKEN_TYPE.TokenPrimary,\r\n                 ref hDupedToken\r\n             ))\r\n             throw new Win32Exception(Marshal.GetLastWin32Error());\r\n\r\n         var si = new STARTUPINFO();\r\n         si.cb = Marshal.SizeOf(si);\r\n         ",
 user_id: 1547,
 question_id: 47,
 created_at: Wed, 15 Jun 2016 05:20:11 UTC +00:00,
 updated_at: Mon, 20 Jun 2016 22:34:08 UTC +00:00,
 accepted: true,
 language: nil,
 comments_count: nil>

最佳答案

您需要向order方法传递一个字符串:

q.answers.order("accepted = true DESC").order(:created_at)

关于ruby-on-rails - 在执行ActiveRecord查询时,如何确定具有属性标记为“true”的记录的优先级,然后将该属性标记为true?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37933201/

10-13 02:10