カービルのように、created_atと日付を比較するために「等しい」述語が必要でしたが、モデルにcreated_atの日時があります(「2012-09-26」など)。
そこで、モデルに追加しました(キャストされた属性を追加し、古いcreated_at / update_at / deleted_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
しかし、クエリを確認すると(created_atは '2012-03-24'に等しい)、次のエラーが発生します。
NoMethodError (undefined method `name' for "date(items.created_at)":Arel::Nodes::SqlLiteral):
驚いたことに、それは「より大きい」と「より小さい」で動作します。このエラーが発生するのは「等しい」のみです。
私はすべてのモデルに対してこれをすべて作成し、60%が機能します(残りの40%はこのエラーが発生します)。
コンソールで:
irb(main):232:0> Item.search(:created_at_eq => Date.today.to_s).result
(Object doesn't support #inspect)
ご協力いただきありがとうございます
編集 :
:Item(:deleted_at false)を作成するdefault_scopeがあります
しかし、なぜエラーが発生するのかわかりません