2015-04-17 40 views
2

我有一个名为User的模型,我将属性参数中的用户模型存储为一个散列。我已经宣布此专栏作为我的用户模型中的商店,而没有任何访问者,我正在以@user.params的身份访问它,同时将数据保存到数据库中它工作得很好。但是,我必须按特定标准检索数据。匹配ActiveRecord ::在数据库中存储列

说我有存储使用参数字段中输入用户对象为{检查:真正} 及其他由{检查:真正}

现在我要检索具有用户PARAMS:{检查:真正}

我使用的查询是:

User.where(params: {"checked" => true}); 

这被投掷的错误为:

INTERNAL ERROR!!! SQLite3::SQLException: no such column: params.checked: SELECT "users".* FROM "users" WHERE "params"."checked" = 't' 

我搜索了一大堆关于比较数据库中的两个商店领域,但还没有找到相关的东西。

在此先感谢

+0

你能提供一些这个“params”字段的更多细节 - 它是一个序列化字段吗?实际存储在数据库中的这个字段的对象是否在你的例子中? –

+0

@sharvy我可以访问它没有任何问题 –

+0

@max是的,它是一个序列化的字段我已经使用了活跃的记录存储,请看看:[链接](http://api.rubyonrails.org/classes/ActiveRecord /Store.html) –

回答

0
class User 
    scope :score, -> { 
    where :score -> true 
    } 
end 

控制器..

@users = params[:checked]? ? User.score : User.all 
0

如果你正在使用MySQL,你不能做一个直接的方式查询。 store只是一个Hash它保存并加载后被序列化和反序列化。当您使用store时,您几乎无法加载和保存数据。

您可以尝试使用LIKE(不能保证它是否会工作或没有):

User.where('params LIKE ?', '%checked: true%') 

我建议不要使用store(连载)为您需要查询上的任何数据。

PostgreSQL可以存储和搜索哈希/ json - 查看hstore