我正在用objective c (iPhone)实现一个分布式应用程序,服务器端带有rails和移动客户端。为了实现国际化,我使用了joshmh的rails插件'globalize2‘。
然而,事实证明,当在ActiveRecord上调用to_xml或to_json时,该插件不会转换属性。有没有人知道解决办法/补丁?你有任何想法如何解决这个问题吗?在哪里修改globalize2?
使用: Rails 2.3.5 globalize2: commit from 2010-01-11
发布于 2010-03-29 03:37:30
使用Globalize2 (以及model_translations ),模型中转换后的属性不是真正的属性,而是一种方法。因此,当您执行to_json方法时,您可以像Joris建议的那样使用:methods,但以一种更简单的方式:
class Post < ActiveRecord::Base
attr_accessible :title, :text
translates :title, :text
end
class PostsController < ApplicationController
def index
@posts = Post.all
respond_to do |format|
format.html
format.json { render :json => { :posts => @posts.to_json(:only => :id, :methods => :title) }}
format.js
end
end
end在这里,我希望在json响应中只接收帖子id和标题。有关更多信息,请参见Rails API中的to_json (序列化)。
发布于 2010-02-04 07:25:03
我在github上找到了这个分支:http://github.com/leword/globalize2,但它看起来是基于一个较老的版本。
我一直在寻找它,但是使用:methods选项解决了我的问题:
如果你想翻译@item中的一个属性,你可以使用:
class Item < ActiveRecord::Base
translates :name
def t_name
self.name
end
end在你的控制器中:
render :text => @item.to_xml(:methods => [ :t_name ])如果您的api path类似于/en/api/item.xml,那么您应该在t_name属性中获得英文翻译
对于belongs_to关系:
belongs_to :category
def category_name
self.category.name
end在你的控制器中:
render :text => @item.to_xml(:methods => [ :category_name ])您的用例可能有所不同。以上是一种适用于我的解决方法。
https://stackoverflow.com/questions/2108577
复制相似问题