【发布时间】:2015-06-23 13:39:01
【问题描述】:
我正在尝试创建一个已离开 cmets 的唯一患者列表,按照最先发表最新评论的患者的顺序排列。
这是我创建列表的 Ruby .erb 代码:
@comment_list.order("created_at desc").each_with_index do |comment, index|
@comment_list 在控制器中定义为:
@comments = current_clinician.comments.select('ON (patient_id) *').uniq
@comments = @comments.order("patient_id, created_at DESC")
@comment_list = Comment.select('*').from("(#{@comments.to_sql}) sub")
我收到一条 ActiveRecord::StatementInvalid 消息:
PG::ProtocolViolation: 错误:绑定消息提供 0 个参数,但准备好的语句“”需要 1 个 : SELECT * FROM (SELECT DISTINCT ON (patient_id) * FROM "cmets" WHERE "cmets"."clinician_id" = $1 ORDER BY patient_id, created_at DESC) sub ORDER BY created_at desc
我尝试关注24619117 上的答案,我的输出是这个和答案顶部29660396 的组合。
$ rails -v
Rails 4.1.8
$ ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin14]
$ psql --version
psql (PostgreSQL) 9.4.1
我对 PostgresSQL 缺乏经验,部分问题是我使用 Ruby on Rails 来获取 SQL,而且方法并不简单。我一直在用http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-from
请提出建议
【问题讨论】:
标签: ruby-on-rails ruby postgresql activerecord subquery