2015-09-05 86 views
1

社區活動記錄日期「逆轉」

我想知道是否有做這樣的

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; 

我想這

查詢的方式(除了原始的SQL)
date=Date.new 
@afiliados=Afiliado.joins(:persona, :afiliacionvehiculos).where(afiliacionvehiculos: {date :fechaInicio..:fechaFinal }) 

但這就是我得到的。

SyntaxError in AfiliadoController#index 
    /Users/cristiantorres/Documents/pruebaRailsTransporte/app/controllers/afiliado_controller.rb:4: 
syntax error, unexpected ':', expecting => ...re(afiliacionvehiculos: {date :fechaInicio..:fechaFinal }) ...^
/Users/cristiantorres/Documents/pruebaRailsTransporte/app/controllers/afiliado_controller.rb:4: 
syntax error, unexpected '}', expecting keyword_end ...ate :fechaInicio..:fechaFinal }) ...^

我知道,通過一個原始的SQL字符串應該工作,但如果有人知道另一種方式我會很感激

回答

2

我沒有正確理解的語言,我們對此深感抱歉。

但是,您的日期範圍的語法是錯誤的。您可以通過日期範圍內活動記錄是這樣的:

date: from_date..to_date 

所以,你的查詢將是這樣的:

Afiliado.joins(:persona, :afiliacionvehiculos).where(date: fechaInicio..fechaFinal) 

如果您afiliacionvehiculos表中有fechaIniciofechaFinal列,那麼你也可以這樣做:

Afiliado.joins(:persona, :afiliacionvehiculos).where('CURRENT_DATE between afiliacionvehiculos.fechaInicio and afiliacionvehiculos.fechaFinal') 
+0

謝謝你花你的時間在我的問題,真正有用的答案 –

+0

高興的是,它幫助你。不要忘記接受答案。要看看它是如何工作的:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

最後,我用這個和完美地工作,是不是你給我的確切答案,但你的回答給我帶來了所需的查詢 @ afiliados = Afiliado.joins( 'LEFT OUTER JOIN角色ON personas.idPersonas = afiliados.Personas_idPersonas' \ \t \t '左外afiliacionvehiculo加入上afiliacionvehiculo.idAfiliado = afiliados.idAfiliado' \ \t \t「和BETWEEN afiliacionvehiculo.fechaInicio和afiliacionvehiculo.fechaFinal CURRENT_DATE」)。不同的() –

0

不幸的是Rails不能這樣工作。

如果您使用where哈希語法然後Rails的總預計,key是列(而不是SQL聲明)的名稱和值是值要檢查(而不是數據庫列名)。

即使是simples where('CURRENT_DATE' => ('foo'..'bar'))將轉化:

WHERE (\"baz\".\"CURRENT_DATE\" BETWEEN 'article' AND 'aside')" 

而且有沒有辦法解決這個,因爲這種Rails的魔法其中表名添加和值轉義是一種安全功能。

因此唯一的解決辦法是部分寫入條件SQL

where('CURRENT_DATE BETWEEN av.fechaInicio AND av.fechaFinal') 
+0

感謝,一對夫婦的frustating小時後我開始懷疑,有沒有答案,但原始的SQL語句,你說清楚了我 –