我正在尝试将点名称(虚拟属性)添加到我的json请求中。
问题是我需要用户的language_id才能在数据库中获得正确的名称。
我找不到任何允许在“as_json覆盖”中使用参数调用方法的代码段。
这是我目前的代码:
# Adds the name of the point when query is json
def as_json(options={})
super.as_json(options).merge({:name => name(language_id)})
end
# Returns the name of the point regarding the column in use in this project.
def name(language_id)
@name ||= get_point_name(language_id)
end
我得到了:
什么工作,是当我用它应该的值替换language_id时(即整数80)。通过这种方式,我用正确的语言得到了我的观点......
我还尝试调用我通常在控制器/视图中使用的全局方法current_language,但似乎我不能从模型中调用这样的全局方法: - (
帮助
答案 0 :(得分:1)
我认为你应该使用自定义序列化程序,如果你正在做很多这样的事情,请参阅ActiveModel::Serializers。
但是,您可以在#as_json覆盖中包含返回正确名称的方法。
super({:methods => [:name]}.merge(options))