需要为DataMapper属性定义别名

时间:2013-12-02 04:01:43

标签: properties sinatra alias datamapper padrino

我正在开发一个在某个部分使用jQuery UI Autocomplete的Padrino / Sinatra应用程序。

要填充自动填充,我已定义以下内容:

get '/autocompletedata' do
  content_type :json
  Foo.all.to_json(:only => :name)
end

这将从一个漂亮的JSON数组中的模型name返回属性Foo,因为:

[{"name":"First"},{"name":"Second"},{"name":"Third"},{"name":"Fourth"}]

但是,jQuery的自动完成要求返回的JSON数据包中的属性名称标记为label,因为:

[{"label":"First"},{"label":"Second"},{"label":"Third"},{"label":"Fourth"}]

在转换过程中,是否有快速且以编程方式将属性名称从name更改为label

如果不这样,我们可以在DataMapper中定义别名属性吗?我似乎无法找到办法做到这一点?!?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方法。

在我的模型Foo中,我添加了以下方法:

def label
  name
end

然后我更改了to_json选项:

Foo.all.to_json(:methods => :label)

得到了我想要的结果。实际上,为了使事情更顺利,我最终缩小了DataMapper查询的范围:

Foo.all(:fields => [:name]).to_json(:methods => :label, :only => :label)