检索用户对象少指定的属性

时间:2011-05-13 19:15:04

标签: ruby-on-rails ruby-on-rails-3 activerecord

这可能非常简单:我有一个控制器在传递参数时返回一个用户对象。

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

这将返回整个用户对象。这是一个问题,因为用户对象是加密的密码,哈希和我不想公开的各种其他数据。

让它返回用户对象减去某些指定属性的正确语法是什么?我正在寻找一个解决方案,我没有从我想要公开的用户属性手动创建一个新的哈希,因为它只是说,“给我没有x和y的用户”比“给我一个哈希”更简单of user.a,user.b,user.c,... user.n“

THX!

3 个答案:

答案 0 :(得分:2)

我假设当你在xml或json中返回数据时这是一个问题。

您可以通过执行此类操作来排除某些字段。

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

或者您可以覆盖模型中的to_xml函数以始终排除值。

答案 1 :(得分:1)

这是另一个建议。

创建一个“消毒”用户的新方法:

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!

答案 2 :(得分:0)

您可以在User对象上添加一个实例方法,该方法将返回具有所需属性的新User对象吗?