像 carvil 一样,我的模型中有 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)
谢谢你的帮助
编辑 :
我有一个 default_scope : Item(:deleted_at false)
但我不知道为什么会出现错误