社区
我想知道是否有办法(除了原始的sql)来做这样的查询
- (void)testB {} will be the second test
- (void)testA {} will be the first test
- (void)testC {} will be the third test
我试过这个
SELECT * FROM
mydb.afiliados AS a
LEFT OUTER JOIN
afiliacionvehiculo AS av ON av.idAfiliado = A.idAfiliado
WHERE a.idAfiliado = 3 AND CURRENT_DATE BETWEEN av.fechaInicio AND av.fechaFinal;
但这就是我得到的。
date=Date.new
@afiliados=Afiliado.joins(:persona, :afiliacionvehiculos).where(afiliacionvehiculos: {date :fechaInicio..:fechaFinal })
我知道传递一个原始的sql字符串应该可以工作,但是如果有人知道另一种方式我会感激
答案 0 :(得分:2)
我不能正确理解这种语言,对不起。
但是,您的日期范围语法是错误的。您可以在活动记录中传递日期范围,如下所示:
date: from_date..to_date
因此,您的查询将是这样的:
Afiliado.joins(:persona, :afiliacionvehiculos).where(date: fechaInicio..fechaFinal)
如果您的afiliacionvehiculos
表格中包含fechaInicio
和fechaFinal
列,那么您也可以这样做:
Afiliado.joins(:persona, :afiliacionvehiculos).where('CURRENT_DATE between afiliacionvehiculos.fechaInicio and afiliacionvehiculos.fechaFinal')
答案 1 :(得分:0)
不幸的是,Rails不能像这样工作。
如果您在where
中使用哈希语法,那么Rails总是希望key
是列的名称(而不是SQL
语句)并且值是值检查(而不是数据库列名称)。
即使简单where('CURRENT_DATE' => ('foo'..'bar'))
也会转换为:
WHERE (\"baz\".\"CURRENT_DATE\" BETWEEN 'article' AND 'aside')"
并且没有办法解决这个问题,因为这种 Rails magic 添加了表名并且值被转义是安全功能。
因此唯一的解决方案是部分地在SQL
:
where('CURRENT_DATE BETWEEN av.fechaInicio AND av.fechaFinal')