Ruby on rails 在rails中改变JSON响应?
我有一个名为User的模型,在许多操作中,我将响应呈现为json。例如,在显示用户数据时,我使用Ruby on rails 在rails中改变JSON响应?,ruby-on-rails,json,rendering,response,Ruby On Rails,Json,Rendering,Response,我有一个名为User的模型,在许多操作中,我将响应呈现为json。例如,在显示用户数据时,我使用 @user=user.find\u by_id(参数[:id]) 呈现json:{data:@user} 现在我有一个要求,在响应用户数据时,我只需要显示手机号码的最后2位(例如)********78,有没有办法做到这一点,因为更改每个操作中的响应太难了,所以有没有办法编写一个通用方法来处理这种情况。您可以在用户模型中编写一个方法 user.rb def as_json(options = {}
@user=user.find\u by_id(参数[:id])
呈现json:{data:@user}
现在我有一个要求,在响应用户数据时,我只需要显示手机号码的最后2位(例如)********78,有没有办法做到这一点,因为更改每个操作中的响应太难了,所以有没有办法编写一个通用方法来处理这种情况。您可以在
用户
模型中编写一个方法
user.rb
def as_json(options = {})
# use options as per need
{id: self.id, name: self.name, mobile: mask}
end
def mask
# masking logic
end
您可以编写一个方法来屏蔽初始字符,并执行呈现json:{data:@user.as_json)}
签出链接最后我通过
def as_json(options = {})
users = super
users['mobile_number'] = "********" + users['mobile_number'].slice(8,9).last if users['mobile_number'].present?
users
end
当我打电话时
render json: {data: @user.as_json}
即使@user可以包含记录的集合,每个记录的手机号码也将以*******78格式呈现
现在的反应是
{
“id”: 143,
“email”:test1@test.com,
“mobile_number”: “********67”
}
谢谢你的帮助。我已经执行了你所说的,但是以不同的方式
呈现json:{data:@user.as_json(仅:[:id,:email]),methods::mask}
,但我有回应{“id”:121,“email”:”test@test.com,“mask”:“**********45”}
ie方法的名称是手机号码的键。请找出问题所在。您可以在json responseThats中随意命名方法。问题在于,我需要的响应是mobile number,但对于掩蔽逻辑“**********”+self.mobile_number.slice(8,9)
,如果方法名称是mobile_number,它将导致无限循环。是的,它正在工作。谢谢你的帮助,但是我有另一个问题,我有一些列要排除,一些列要包含,这在不同的操作上是不同的,但是如果我像这样覆盖as_json,我将无法这样做,是否还有其他选择。现在我已经通过使用render json:{data:@user.as_json(仅:[id,:email])merge解决了这个问题(mobile_number:@user.mask)}
但是还有一个问题,在某些操作中,我需要显示用户列表,这个解决方案不适合那里。