получить пользовательский объект без указанных атрибутов - PullRequest
0 голосов
/ 13 мая 2011

Это может быть очень просто: у меня есть контроллер, который возвращает объект пользователя при передаче параметра.

def show
  if params[:mob]
    user = User.find(params[:id])
    respond_with([user.establishments,
                user])

это возвращает весь пользовательский объект. Это проблема, потому что на пользовательском объекте есть зашифрованный пароль, хэш и другие данные, которые я не хочу раскрывать.

Какой будет правильный синтаксис, чтобы он возвращал объект пользователя за вычетом некоторых указанных атрибутов? Я ищу решение, в котором у меня нет необходимости вручную создавать новый хеш из пользовательских атрибутов, которые я хочу предоставить, потому что было бы проще просто сказать «дать мне пользователя без x и y», чем «дать мне хеш» пользователя user.a, user.b, user.c, ... user.n "

ТНХ!

Ответы [ 3 ]

2 голосов
/ 13 мая 2011

Я предполагаю, что это проблема, когда вы возвращаете данные в формате xml или json.

Вы можете обойти это, выполнив что-то подобное, чтобы исключить определенные поля.

obj.to_xml(:except => [ :created_at, :updated_at ])

или вы можете переопределить функцию to_xml в модели, чтобы всегда исключать значения.

1 голос
/ 13 мая 2011

Вот еще одно предложение.

Создайте новый метод, который «дезинфицирует» пользователя:

class User < ActiveRecord::Base
  ...
  def strip_sensitive_data!
    [:password, :ssn, :birth_date].each { |m| send("#{m}=", nil) }
  end
  ...
end

user = User.find(params[:id]).strip_sensitive_data!
0 голосов
/ 13 мая 2011

Можете ли вы добавить метод экземпляра для объекта User, который бы возвращал новый объект User с необходимыми атрибутами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...