Ruby on rails 为什么ActiveRecord::Store.Store\u acessor在查询时不反映结果SQL

Ruby on rails 为什么ActiveRecord::Store.Store\u acessor在查询时不反映结果SQL,ruby-on-rails,ruby,activerecord,hstore,Ruby On Rails,Ruby,Activerecord,Hstore,以这一类为例: 类UsersMigration

以这一类为例:

类UsersMigration User.whereprivileges:'管理员' 它会导致以下错误: ActiveRecord::Statement无效PG::UndefinedColumn:错误:column users.privileges不存在 这是正确的,因为该列实际上是设置

为了进行查询,我们必须执行以下操作:

User.where设置->privileges'='Admin' 如果模型已显式序列化到hstore列,为什么第一个查询不会生成以下SQL:

从用户中选择用户。*,其中设置->“权限”=“管理员”
ActiveRecord的构建并不是为了真正关心hstore、json或数组列的内容。AR是围绕具有表和列的关系模型构建的。表中的列对应于模型中的属性

Hstore、json和数组类型是相对较新的数据库特性,而不是polyglot。每个数据库的实现都有所不同。在ActiveRecord中,对这些列的支持实际上是由数据库驱动程序而不是框架本身提供的

store_访问器只是创建一个getter/setter,并为模型中的属性设置脏跟踪。它没有明确地告诉AR这是hstore列中的某个内容——记住AR对hstore列的内容没有给出任何FAWK


事实上,我想说的是,如果您以这种方式使用它,这是一个非常明显的迹象,表明您已经成为了。构建ActiveRecord并不是为了真正关心hstore、json或数组列的内容。AR是围绕具有表和列的关系模型构建的。表中的列对应于模型中的属性

Hstore、json和数组类型是相对较新的数据库特性,而不是polyglot。每个数据库的实现都有所不同。在ActiveRecord中,对这些列的支持实际上是由数据库驱动程序而不是框架本身提供的

store_访问器只是创建一个getter/setter,并为模型中的属性设置脏跟踪。它没有明确地告诉AR这是hstore列中的某个内容——记住AR对hstore列的内容没有给出任何FAWK


事实上,我想说,如果您以这种方式使用它,这是一个非常明显的迹象,表明您已成为。

its的受害者,因为ActiveRecord是围绕关系模型而构建的,而不是相对较新的json/hstore。store_访问器实际上只是委托,与AR如何构建查询无关。这是因为ActiveRecord是围绕关系模型构建的,而不是相对较新的json/hstore。store_访问器实际上只是委托,与AR如何构建查询无关。感谢您提到我不熟悉的反模式。我猜我的示例不适合我当前项目中的用户情况。另一个假设是:如果AR负责构建查询,而您故意告知这是一个hstore和密钥名称,为什么不以ORM方式构建此查询?感谢您提到我不熟悉的反模式。我猜我的示例不适合我当前项目中的用户情况。另一种说法是:如果AR负责构建查询,而您故意告知这是一个hstore和密钥的名称,为什么不以ORM方式构建此查询?