Rails as_json在带有参数的模型中覆盖

时间:2014-03-13 12:22:02

标签: ruby-on-rails json

我正在尝试将点名称(虚拟属性)添加到我的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

我得到了:

  • 错误的参数数量(0表示1),如果我删除参数
  • 未定义的局部变量或方法`column_id'用于#,如果我保留参数

什么工作,是当我用它应该的值替换language_id时(即整数80)。通过这种方式,我用正确的语言得到了我的观点......

我还尝试调用我通常在控制器/视图中使用的全局方法current_language,但似乎我不能从模型中调用这样的全局方法: - (

帮助

1 个答案:

答案 0 :(得分:1)

我认为你应该使用自定义序列化程序,如果你正在做很多这样的事情,请参阅ActiveModel::Serializers

但是,您可以在#as_json覆盖中包含返回正确名称的方法。

super({:methods => [:name]}.merge(options))