将模型渲染为json并在其中一个模型列上使用encode64

时间:2012-04-29 20:42:00

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

我正在尝试将模型作为json发送。该模型在其中一列中包含二进制数据。对于我使用的另一个模型

format.json {self.encode64(@resource_type.data).to_json}

成功,但在那种情况下我只想要数据列,而不是标题等。当我需要来自多个列的内容时,我该怎么办?其中只有一列的内容应该用encode64编码?

在下面的代码中,我不知道将self.encode64方法放在何处。

format.json { render :json => @resource.to_json(:only => [:id, :title, :data])}

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你有几个选择。

您可以向模型中添加data_base64方法,该方法以base-64格式返回data,然后在控制器中使用:methods选项to_json:< / p>

@resource.to_json(:only => [ :id, :title ], :methods => :data_base64)

这会在JSON而不是data_base64中为您提供data密钥,但这可能不是问题。

您还可以使用as_json获取哈希并修复控制器中的编码:

json = @resource.as_json(:only => [ :id, :title, :data ])
json['resource']['data'] = self.encode64(json['resource']['data'])
render :json => json

答案 1 :(得分:0)

您可以在模型中使用as_json来覆盖此行为,例如

def as_json(options={})
  { :name_of_resource => { :created_at => created_at, binary => encode64(self.data) } }
end

您需要指定他应该如何将整个模型序列化为json。

干杯!