Rails如何创建一个作用域来过滤列中的json键



在我的一列中,我有一个json对象,像这样:

{"name":"test", "age":'12'}

这个数据在我的专栏里。我想为所有有age: 12的记录做一个范围选择。我如何使一个rails范围过滤出基于json键在这一列。我试着写

scope :age_filter, -> {where(column["age"]: 12)}

但是会导致语法错误;我不确定我应该如何处理这样的场景,因为列中的值是一个json对象,而不是单个值。

您必须使用数据库的JSON操作符来查询JSON。

例如,如果这是一个Postgres JSON列data

scope :age_filter, ->{ where("data->>'age' = ?", 12) }

也可以使用jsonb_accessor

scope :age_filter, ->{ data_where(age: 12) }

注意:我建议尽可能使用常规列,并且只对自由格式的数据使用JSON。虽然JSON -accessor有帮助,但是Ruby on Rails并没有很好地与JSON集成,传统的列不会那么麻烦。在上面的示例中,age应该是一个普通的整数列。

相关内容

  • 没有找到相关文章

最新更新