像carvil我在我的模型中有一个日期时间created_at,虽然我想要“等于”谓词来比较created_at和日期(如'2012-09-26')。Ruby on Rails Ransack日期时间到日期搜索
所以我在我的模型中加入(为了增加铸造属性,并取下旧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):
出人意料的是,它的工作原理与和‘小于’只有‘等于’会出现此错误‘大于’
我做这一切的一切我莫dels和60%的工程(剩下的40%发生这个错误)。
在控制台:
irb(main):232:0> Item.search(:created_at_eq => Date.today.to_s).result
(Object doesn't support #inspect)
感谢您的帮助
编辑:
我有一个default_scope这使得: 项目(:deleted_at假)
但我不知道为什么会出现这个错误
它看起来像这样一直没有得到解决尚未:https://github.com/activerecord-hackery/ransack/issues/34 。你有没有想过你的问题? –