【问题标题】:Matching ActiveRecord::Store columns in database匹配 ActiveRecord::Store 数据库中的列
【发布时间】:2015-04-17 12:46:44
【问题描述】:

我有一个名为 User 的模型,我在属性参数中将哈希存储到用户模型。我已将此列声明为我的用户模型中的存储,没有任何访问器,我以@user.params 访问它,同时将数据保存到数据库中它工作得很好。但是,我必须按某些标准检索数据。

假设我存储了一个用户对象,其中 params 字段为 { checked: true } 和其他{检查:真}

现在我必须检索具有参数的用户:{checked: true}

我使用的查询是:

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

这是抛出错误:

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

我搜索了大量关于比较数据库中两个商店字段的信息,但没有找到相关的东西。

提前致谢

【问题讨论】:

  • 您能否提供有关此“参数”字段的更多详细信息 - 它是一个序列化字段吗?对于您的示例中的对象,该字段实际存储在数据库中的是什么?
  • @sharvy 我可以毫无问题地访问它
  • @max 是的,它是一个序列化的文件,我使用了活动记录存储,请看一下:link
  • 您的params 列类型是什么?
  • @Liyali 它在数据库中的列类型是文本

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:
class User
  scope :score, -> {
    where :score -> true
  }
end

控制器..

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

【讨论】:

    【解决方案2】:

    如果您使用的是 MySQL,则无法直接进行查询。 store 只是一个 Hash,它在保存和加载时会被序列化和反序列化。当您使用store 时,您几乎只能加载和保存数据。

    您可以尝试使用LIKE(无法确定是否有效):

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

    我建议不要将store(序列化)用于您需要查询的任何数据。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2021-11-08
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多