9

我的数据库中有一个名为 IP 的字段,当他在 Rails 内置的博客中发送消息时,我将用户 IP(在 #create 方法中)放在其中。

但是当我想以另一种格式(JSON)查看文章时,该字段是可见的。如何隐藏字段 IP?

4

2 回答 2

12

您可以在控制器中的格式块中执行此操作,如下所示:

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
于 2012-05-03T13:03:28.043 回答
5

虽然这不是密码或特别要求的正确解决方案,但当您在 ​​Google 上隐藏 ActiveRecord 中的列时,就会出现这种情况,所以我将把它放在这里。

Rails5 引入了新的 API,ignored_columns可以让 activerecord 忽略一个列的完全存在。这是真正想要的,许多其他通过谷歌到达这里的人可能也这样做了。

我自己还没有尝试过。

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

于 2018-05-22T16:20:38.443 回答