如何清理在rails 3中使用belongs_to获得的对象

时间:2010-12-18 19:31:21

标签: ruby-on-rails model ruby-on-rails-3 belongs-to

我有两个类:User和Message。以下是定义:

class Message < ActiveRecord::Base
  belongs_to  :receiver, :class_name => 'User', :foreign_key  => 'receiver'
  belongs_to  :sender, :class_name   => 'User', :foreign_key  => 'sender'
end

class User < ActiveRecord::Base
  has_many :incoming_messages, :class_name => 'Message', :foreign_key => 'receiver'
  has_many :outgoing_messages, :class_name => 'Message', :foreign_key => 'sender'
end

当我在控制器中收到消息时,我也会在

中获取用户对象
@message.receiver 

@message.sender

这些对象包含一些用户信息(密码等),我希望在将它传递给视图之前将其删除(在我的情况下是一个json对象)。这样做的最佳方式是什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您在视图中手动渲染对象,则无需清理 - 响应将仅包含您公开的元素。

如果您使用的是AJAX和to_json,有几种方法可以删除这些信息。您可以在初始Model.find中使用select来确保实际上不从查询返回敏感信息。有关详情,请参阅Active Record Querying - selecting specific fields

另一种方法是使用以下方法覆盖JSON渲染本身以仅显示必填字段:

to_json(:only => [ :column, :column ])