Скрыть поле в Ruby on Rails

У меня есть поле в моей базе данных под названием IP, где я помещаю IP пользователя (в метод #create), когда он отправляет сообщение в моем блоге, встроенном в Rails.

но поле отображается, когда я хочу видеть статьи в другом формате (JSON). Как скрыть поле IP?

2 ответов


Вы можете сделать это в блоке формата в вашем контроллере следующим образом:

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

хотя это не совсем правильное решение для паролей или для того, что конкретно спрашивается, это то, что появляется, когда вы 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