在 rails 中更改 JSON 响应?
Altering JSON response in rails?
我有一个名为 User 的模型,在许多操作中我将响应渲染为 json。例如,在显示用户数据时,我正在使用
@user = User.find_by_id(params[:id])
render json: {data: @user}
现在我有一个要求,在响应用户数据时,我只需要显示手机号码的最后 2 位数字,例如)*********78,有什么办法可以实现这个,因为改变每个action的反应都会很困难,有没有办法写一个通用的方法来处理这种情况。
你可以在user
模型中写一个方法
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
您可以编写一个方法来屏蔽初始字符并执行 render json: {data: @user.as_json)}
结帐thislink
最后我通过
解决了问题
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”
}
感谢 benchwarmer's 的帮助。
我有一个名为 User 的模型,在许多操作中我将响应渲染为 json。例如,在显示用户数据时,我正在使用
@user = User.find_by_id(params[:id])
render json: {data: @user}
现在我有一个要求,在响应用户数据时,我只需要显示手机号码的最后 2 位数字,例如)*********78,有什么办法可以实现这个,因为改变每个action的反应都会很困难,有没有办法写一个通用的方法来处理这种情况。
你可以在user
模型中写一个方法
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
您可以编写一个方法来屏蔽初始字符并执行 render json: {data: @user.as_json)}
结帐thislink
最后我通过
解决了问题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”
}
感谢 benchwarmer's 的帮助。