使用respond_with时抑制/过滤资源属性

时间:2013-03-30 23:15:59

标签: ruby-on-rails

我正在使用Rails 3。

使用respond_with输出JSON / XML / HTML时,默认情况下会转储所有属性。隐藏/过滤/抑制不应呈现的资源属性的好策略是什么?

文章here解释了respond_with的作用。

1 个答案:

答案 0 :(得分:4)

有几个选择。

您可以覆盖正在使用的模型上的as_json方法 http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/

您可以使用json构建器
jbuilder
rabl

你可以创建一个序列化器
http://railscasts.com/episodes/409-active-model-serializers

或者您可以使用:only

上的to_json选项
def index
  @models = Model.all
  respond_with(@models) do |format|
    format.html { render }
    format.json { 
      render json: @models.to_json(
        only: [:some_attribute, :some_other_attribute]
      )
    }
  end
end

除非你在许多动作中使用这些约束,否则我会推荐最后一个选择(使用:only因为我认为它是最简单的但你可能觉得控制器不适合这种逻辑

还有很多方法可以做到这一点。

修改
respond_with将哈希作为第二个参数使上面更漂亮(感谢@ ck3g)

def index
  @models = Model.all
  respond_with @models, only: [:some_attribute, :some_other_attribute]
end