Ruby on rails 当呈现为JSON时,如何使存储键像模型的任何其他属性一样可访问

Ruby on rails 当呈现为JSON时,如何使存储键像模型的任何其他属性一样可访问,ruby-on-rails,json,store,accessor,Ruby On Rails,Json,Store,Accessor,我在users表中有一个设置列(jsonb数据类型),我希望对其进行反序列化并使其可供模型访问。这是我的模型的样子 class User < ActiveRecord::Base store_accessor :settings, :color, :locale end class用户

我在users表中有一个设置列(jsonb数据类型),我希望对其进行反序列化并使其可供模型访问。这是我的模型的样子

class User < ActiveRecord::Base
  store_accessor :settings, :color, :locale
end
class用户
User.first.color
有效

但是
User.first.由于json
在行级别不包含
color
键,因此它在
设置中可用

类似地,
render json:User.find(params[:id])
也做同样的事情


在呈现JSON时,如何使行级别的
color
locale
可用?

User。首先,as_JSON
呈现JSON:User.find(params[:id])
将无法获得所需的结果。当您希望构造一个具有从模型函数返回的属性的json时,也会发生同样的情况

我使用Jbuilder()进行序列化。它非常适合呈现json

示例代码

用户\u controller.rb /视图/函数_x.json.jbuilder 现在你的json应该是这样的

{
    id: ....,
    param1: value 1,
    param2: value 2,
    color: color_value,
    locale: locale_value
}

有很多方法,我建议您使用,这样您就可以完全控制序列化的内容,并且不会因为覆盖
User
模型中的
as\u json
方法而把事情搞砸。我有STI设置,其中为所有子类定义了store\u访问器。我不喜欢必须为所有控制器定义jbuilder这一事实。在行级别取消存储的信息可以在
store\u accessor
中找到,应该很容易使用,就像
render json:User一样。首先,包括:[:角色]
(用户有很多角色)@Mo3z我知道已经很多年了,但是你找到了合适的解决方案吗?
json.extract! @user, :id, :other_params_from_users_table
json.color @user.color
json.locale @user.locale
{
    id: ....,
    param1: value 1,
    param2: value 2,
    color: color_value,
    locale: locale_value
}