我有一个名为User的模型,我将用户模型的散列存储在params属性中。但是,我必须按某些标准检索数据。
假设我存储了一个用户对象,其中params字段为{ checked: true },其他字段为{ checked: true }
现在我必须检索具有params:{ checked: true}的用户
我使用的查询是:
User.where(params: {"checked" => true});这是抛出错误,因为:
INTERNAL ERROR!!! SQLite3::SQLException: no such column: params.checked: SELECT "users".* FROM "users" WHERE "params"."checked" = 't'我搜索了一大堆关于在数据库中比较两个store字段的信息,但没有找到相关的东西。
提前感谢
发布于 2015-04-17 21:05:10
class User
scope :score, -> {
where :score -> true
}
end控制器..
@users = params[:checked]? ? User.score : User.all发布于 2015-04-17 21:12:10
如果您使用的是MySQL,则不能直接执行查询。store只是一个Hash,它在保存和加载时被序列化和反序列化。当您使用store时,您在加载和保存数据方面受到很大限制。
你可以尝试使用LIKE (不能保证它是否能工作):
User.where('params LIKE ?', '%checked: true%')我建议不要对任何需要查询的数据使用store (序列化)。
PostgreSQL可以存储和搜索哈希/json-查看hstore__。
https://stackoverflow.com/questions/29699648
复制相似问题