【发布时间】:2012-05-12 23:44:47
【问题描述】:
我的数据库中有一个名为 IP 的字段,当他在我的 Rails 内置博客中发送消息时,我将用户 IP(在 #create 方法中)放在其中。
但当我想以另一种格式 (JSON) 查看文章时,该字段是可见的。 如何隐藏字段 IP?
【问题讨论】:
标签: ruby-on-rails ruby database blogs field
我的数据库中有一个名为 IP 的字段,当他在我的 Rails 内置博客中发送消息时,我将用户 IP(在 #create 方法中)放在其中。
但当我想以另一种格式 (JSON) 查看文章时,该字段是可见的。 如何隐藏字段 IP?
【问题讨论】:
标签: ruby-on-rails ruby database blogs field
您可以像这样在控制器中的格式块中执行此操作:
respond_to do |format|
format.json { render :json => @user, :except=> [:ip] } # or without format block: @user.to_json(:except => :ip)
end
如果您想普遍排除特定字段,只需覆盖用户模型中的 to_json 方法即可:
class User < ActiveRecord::Base
def to_json(options={})
options[:except] ||= [:ip]
super(options)
end
end
更新:在 Rails 6 中,方法变成了as_json:
class User < ApplicationRecord
def as_json(options={})
options[:except] ||= [:ip]
super(options)
end
end
【讨论】:
to_json,那么您做错了:blog.codepath.com/2011/05/16/… 和quickleft.com/blog/keeping-your-json-response-lean-in-rails
虽然这对于密码或特别要求的内容来说不是很正确的解决方案,但当您在 Google 上隐藏 ActiveRecord 中的列时就会出现这种情况,所以我将把它放在这里。
Rails5 引入了新的 API,ignored_columns,它可以让 activerecord 忽略一列完全存在。这正是 我 真正想要的,而且许多其他通过 Google 到达这里的人可能也是如此。
我自己还没有尝试过。
class User < ApplicationRecord
self.ignored_columns = %w(employee_email)
end
https://blog.bigbinary.com/2016/05/24/rails-5-adds-active-record-ignored-columns.html
【讨论】: