Ruby on rails 当呈现为JSON时,如何使存储键像模型的任何其他属性一样可访问
我在users表中有一个设置列(jsonb数据类型),我希望对其进行反序列化并使其可供模型访问。这是我的模型的样子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用户
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
}