2012-09-26 53 views
5

carvilと同じように、私はモデルにcreated_atのdatetimeを持っていますが、 "equals"述語でcreated_atとdate( '2012-09-26'のようなもの)を比較したかったのです。Ruby on Rails Ransack日時検索

だから私は、キャストの属性を追加し、古いのcreated_at/update_at/deleted_atを離陸するために(私のモデルに追加:私は、クエリ(created_atとは「に等しいことを確認するとき

ransacker :created_at do 
    Arel::Nodes::SqlLiteral.new("date(items.created_at)") 
end 

ransacker :updated_at do 
    Arel::Nodes::SqlLiteral.new("date(items.updated_at)") 
end 

ransacker :deleted_at do 
    Arel::Nodes::SqlLiteral.new("date(items.deleted_at)") 
end 

# Hide some attributes for advanced search 
UNRANSACKABLE_ATTRIBUTES = ["created_at", "updated_at", "deleted_at"] 

def self.ransackable_attributes auth_object = nil 
    (column_names - UNRANSACKABLE_ATTRIBUTES) + _ransackers.keys 
end 

をしかし2012-03- 24' )私はこのエラーを持っている:。

NoMethodError (undefined method `name' for "date(items.created_at)":Arel::Nodes::SqlLiteral): 

は驚くべきことに、それだけでこのエラーが発生する 『等しい』と 『未満』 『より大きい』と連携

私はすべての私のためにこのすべてを作りました。モ(残りの40%はこのエラーが発生します)。コンソールで

irb(main):232:0> Item.search(:created_at_eq => Date.today.to_s).result 
(Object doesn't support #inspect) 

ご協力いただきありがとうござい

EDIT: 項目(::deleted_at偽)

私が作るdefault_scopeを持っています

しかし、私はなぜそれがエラーが発生するのか分からない

+0

これはまだ解決されていないように見えます:https://github.com/activerecord-hackery/ransack/issues/34 。問題を理解したことはありますか? –

答えて

1

Arel::Nodes::SqlLiteral.new('date(column_name)')を​​と変更してください。

あなたの構文は次のようになります::

ransacker :created_at do 
    Arel.sql("date(items.created_at)") 
end 

ransacker :updated_at do 
    Arel.sql("date(items.updated_at)") 
end 

ransacker :deleted_at do 
    Arel.sql("date(items.deleted_at)") 
end 

私は、これは参考になるホーブ。

1

私はこのいくつかの問題があったが、これに付属している:

ransacker :created_at, type: :date do 
    Arel.sql('date(created_at)') 
end 
関連する問題