在我的一列中,我有一个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
应该是一个普通的整数列。