我想通过自定义SQL查询来利用Rails范围。您可以单击这篇文章,以供我尝试 - 尤其是在ActiveAdmin中。
如何使用find_by_sql查询ActiveAdmin索引页?
基本上我正在尝试做这样的事情
class YourModel < ActiveRecord::Base
scope :my_scope, where('some custom SQL')
scope :my_other_scope, where('some other custom SQL')
end
这是我的查询,我首先在Rails C
LesleyGrade.where('select distinct STC_TERM_GPA,
TERM,
last,
first
from lesley_grades
order by first, term ASC')
本质上,这是一个子句中的子查询。我只想返回每行的独特的stc_term_gpa。
这些是我在lesley_grades
表中的属性,它可能有助于了解我要检索的信息。
id
user_id
lesley_id
last
first
active
site
cohort
section
sections_title
faculty
completed_term_cred
term
sec_start_date
sec_end_date
grade
stc_cred
active_program
most_recent_program
intent_filed
stc_term_gpa
sta_cum_gpa
start_term
prog_status
last_change_date
created_at
updated_at
所以我想看看这是否可以在Rails C
中起作用,这就是我得到的。
LesleyGrade Load (51.1ms) SELECT "lesley_grades".* FROM "lesley_grades" WHERE (select distinct STC_TERM_GPA,
TERM,
last,
first
from lesley_grades
order by first, term ASC)
PG::SyntaxError: ERROR: subquery must return only one column
LINE 1: ...ECT "lesley_grades".* FROM "lesley_grades" WHERE (select di...
^
: SELECT "lesley_grades".* FROM "lesley_grades" WHERE (select distinct STC_TERM_GPA,
TERM,
last,
first
from lesley_grades
order by first, term ASC)
=> #<LesleyGrade::ActiveRecord_Relation:0x3fcb44d60944>
我不确定如何修复
PG::SyntaxError: ERROR: subquery must return only one column
不确定您要尝试的是什么,但是类似的事情至少应该解决您看到的邮政错误:
LesleyGrade.where('STC_TERM_GPA IN
(SELECT STC_TERM_GPA FROM
(SELECT DISTINCT STC_TERM_GPA, TERM, last, first
FROM lesley_grades
order by first, term ASC) AS results
)'
)
那里有几个级别:
最深的级别说:"让我的所有行具有独特/独特的组合,
下一层说"这些结果,摆脱其他列,只给我 stc_term_gpa 列。
最外层说:"给我所有行,其中 stc_term_gpa 值在 stc_term_gpa of of of of stc_term_gpa 我们刚刚选择的集合中。
。编辑:听起来您根本没有WHERE
子句。您想要类似的东西:
LesleyGrade.select('STC_TERM_GPA, TERM, last, first').group('STC_TERM_GPA').order('first, term ASC')
未经测试。但是要选择多个列,但是仅限于一列的不同值,您需要使用SQL的GROUP BY
子句,该子句可通过group
方法在Rails的ActiveRecord
中获得。
btw,select distinct STC_TERM_GPA, TERM, last, first from lesley_grades order by first, term ASC
将为您提供唯一的结果,而STC_TERM_GPA, TERM, last, first
的组合,而不仅仅是STC_TERM_GPA
。我假设在您想要所有这些列时,您只想在STC_TERM_GPA
上进行区分。