【问题标题】:Hide a field in Ruby on Rails在 Ruby on Rails 中隐藏字段
【发布时间】:2012-05-12 23:44:47
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby database blogs field


    【解决方案1】:

    您可以像这样在控制器中的格式块中执行此操作:

    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
    

    【讨论】:

    • 所以如果我从 json 中排除 [:ip] 我可以确定没有人可以看到它?
    • 是的, :except 意味着它完全跳过将该属性写入 JSON 输出。
    • 使用 except 确保给定的属性不包含在 json 编码中。因此,如果您将“nobody”定义为看到 json 表示的一组用户,那么可以。该字段仍将存在于数据库中,因此数据库管理员将能够看到它。
    • 请注意,如果您使用的是to_json,那么您做错了:blog.codepath.com/2011/05/16/…quickleft.com/blog/keeping-your-json-response-lean-in-rails
    【解决方案2】:

    虽然这对于密码或特别要求的内容来说不是很正确的解决方案,但当您在 ​​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

    【讨论】:

      猜你喜欢
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 2013-01-17
      相关资源
      最近更新 更多