2016-11-25 85 views
1

我想日期更大超過一個特定的日期,或小於甚至日期兩者之間有AREL指定的日期。這是我的控制器:獲取日期查詢,在軌方法之間AREL和GT LT

@from_time = search[:value][:from_time] 
@to_time = search[:value][:to_time] 
letters_query = letters[@key].between(@[email protected]_time) 
@letters = Letter.joins(:official).where(letters_query) 

,這是JSON我進入我的控制器

Parameters: {"query"=>{"search"=>{"0"=>{"key"=>"letter_date", "value"=>{"from_time"=>"01/09/1395", "to_time"=>"30/09/1395"}, "type"=>"date"}}}} 

我確定要獲取參數,要注意我的日期是太陽能類型! 它返回錯誤

If you are passing user input to a predicate, you must either give an appropriate type caster object to the `Arel::Table`, or manually cast the value before passing it to Arel. 
    DEPRECATION WARNING: Passing a column to `quote` has been deprecated. It is only used for type casting, which should be handled elsewhere. See https://github.com/rails/arel/commit/6160bfbda1d1781c3b08a33ec4955f170e95be11 for more information. (called from p at /home/afsane/Desktop/Afsane Development/Production/isecretariat/app/controllers/searches_controller.rb:511) 
    DEPRECATION WARNING: table_exists? is deprecated and will be removed from Rails 5.1 (use #data_source_exists? instead) (called from p at /home/afsane/Desktop/Afsane Development/Production/isecretariat/app/controllers/searches_controller.rb:511) 
    Arel performing automatic type casting is deprecated, and will be removed in Arel 8.0. If you are seeing this, it is because you are manually passing a value to an Arel predicate, and the `Arel::Table` object was constructed manually. The easiest way to remove this warning is to use an `Arel::Table` object returned from calling `arel_table` on an ActiveRecord::Base subclass. 

    If you're certain the value is already of the right type, change `attribute.eq(value)` to `attribute.eq(Arel::Nodes::Quoted.new(value))` (you will be able to remove that in Arel 8.0, it is only required to silence this deprecation warning). 

    You can also silence this warning globally by setting `$arel_silence_type_casting_deprecation` to `true`. (Do NOT do this if you are a library author) 

    If you are passing user input to a predicate, you must either give an appropriate type caster object to the `Arel::Table`, or manually cast the value before passing it to Arel. 

爲greated和我用這個小:

letters_query = officials[@key].lt(@to_time) 
letters_query = officials[@key].gt(@from_time) 

我測試了很多,所有的問題與此

@letters = Letter.joins(:official).where(letters_query) 

有什麼想法?

+0

什麼是'字母[@key]'? –

+0

鍵是列名例如字母[:created_at] @JagdeepSingh –

+0

我發現問題的查詢應該看起來像這樣:letters [:letter_date] .gt(Date.new(2016,10,20)),但問題我的日期是太陽能不是基督教的日曆!我該怎麼辦 ? –

回答

2

隨着AREL,這是如何產生合適的查詢日期:

letters = Letter.arel_table 
@letter = Letter.where(letters[:date].between(Date.new(2016,08,24)..Date.new(2016,09,24)) 
1

我想你可以在這裏使用parsi-date作爲寶石中的年份,你的問題看起來與我相似。你將需要相應地解析你的查詢參數。如果存儲在數據庫中的日期採用基督教日曆格式,您將執行to_gregorian

@from_time = Parsi::Date.parse(search[:value][:from_time]).to_gregorian 
@to_time = Parsi::Date.parse(search[:value][:to_time]).to_gregorian 
相關問題