从 API json 中删除 password_digest?
Removing password_digest from API json?
我正在使用 Sinatra 制作一个简单的小程序 API。我一直无法找到一种方法来从我正在输出的 JSON 中删除 'password_digest' 字段。好吧,我知道我可以做很多事情,但我觉得有一种更简单的方法。
get "/users/all" do
content_type :json
@users = User.all
response = @users.map do |user|
user = user.to_h
user.delete("password_digest")
user
end
response.to_json
结束
我要做的就是从输出中删除 password_digest 字段。有没有简单的方法可以做到这一点?我试过搜索但没有成功。
你应该可以做到这一点:
get "/users/all" do
content_type :json
@users = User.all
response = @users.map do |user|
user = user.to_h # If your data is already a hash, you don't need this line.
user.delete(:password_digest) # <-- If your keys are symbolized
user.delete("password_digest") # <-- If your keys are strings
user
end
response.to_json
end
get "/users/all" do
content_type :json
@users = User.all
@users.to_json(except: [:password_digest])
end
您还可以覆盖模型上的 #as_json
以从序列化中完全删除属性:
class User < ActiveRecord::Base
def as_json(**options)
# this coerces the option into an array and merges the passed
# values with defaults
excluding = [options[:exclude]].flatten
.compact
.union([:password_digest])
super(options.merge(exclude: excluding))
end
end
我正在使用 Sinatra 制作一个简单的小程序 API。我一直无法找到一种方法来从我正在输出的 JSON 中删除 'password_digest' 字段。好吧,我知道我可以做很多事情,但我觉得有一种更简单的方法。
get "/users/all" do
content_type :json
@users = User.all
response = @users.map do |user|
user = user.to_h
user.delete("password_digest")
user
end
response.to_json
结束
我要做的就是从输出中删除 password_digest 字段。有没有简单的方法可以做到这一点?我试过搜索但没有成功。
你应该可以做到这一点:
get "/users/all" do
content_type :json
@users = User.all
response = @users.map do |user|
user = user.to_h # If your data is already a hash, you don't need this line.
user.delete(:password_digest) # <-- If your keys are symbolized
user.delete("password_digest") # <-- If your keys are strings
user
end
response.to_json
end
get "/users/all" do
content_type :json
@users = User.all
@users.to_json(except: [:password_digest])
end
您还可以覆盖模型上的 #as_json
以从序列化中完全删除属性:
class User < ActiveRecord::Base
def as_json(**options)
# this coerces the option into an array and merges the passed
# values with defaults
excluding = [options[:exclude]].flatten
.compact
.union([:password_digest])
super(options.merge(exclude: excluding))
end
end