在Ruby on Rails中隐藏字段

Rox*_*dow 6 ruby database blogs field ruby-on-rails

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

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

emr*_*ass 9

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

respond_to do |format|
  format.json { render :json => @user, :except=> [:ip] } # or without format block: @user.to_json(:except => :ip)
end
Run Code Online (Sandbox Code Playgroud)

如果您想要通常排除特定字段,只需覆盖用户模型中的to_json方法:

class User < ActiveRecord::Base
  def to_json(options={})
    options[:except] ||= [:ip]
    super(options)
  end
end
Run Code Online (Sandbox Code Playgroud)


jro*_*ind 5

虽然这对于密码或特别要求的内容来说不是完全正确的解决方案,但当您在 ​​Google 上搜索 ActiveRecord 中的隐藏列时会出现这种情况,因此我将把它放在这里。

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

我自己还没试过。

class User < ApplicationRecord
  self.ignored_columns = %w(employee_email)
end
Run Code Online (Sandbox Code Playgroud)

https://blog.bigbinary.com/2016/05/24/rails-5-adds-active-record-ignored-columns.html