在jbuilder中向对象添加属性不起作用

时间:2015-08-06 11:19:13

标签: ruby-on-rails ruby json jbuilder

在使用jbuilder构建JSON响应时,我想为每个Employee对象添加一个属性“image_full_url”。

在我的jbuilder文件中,如下所示:

json.branch_companies @companies.select{ |branch| branch.head_company_id == head_company.id}.map{|branch| {
    :branch => branch, 
    :employees => branch.employees.select(employee_attributes).each{ |emp| emp.image_full_url = "#{root_url[0..-2]}#{emp.photo_image.url}" },
    :machine_categories => branch.machine_categories.pluck(:id, :name, :description)
    }
}

在我的Emplyoee模型中,我有一个相应的attr_accessor:

attr_accessor :image_full_url

向Employee对象添加属性可在控制台上完美运行。

我遇到问题的部分在这里:

:employees => branch.employees.select(employee_attributes).each{ |emp| emp.image_full_url = "#{root_url[0..-2]}#{emp.photo_image.url}" }

我希望“image_full_url”属性被添加到emp对象中,但它不是。 JSON响应不包含“image_full_path”字段。我究竟做错了什么?任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

当然,你的json输出中不会得到:image_full_url属性,因为序列化程序对它一无所知。你可以通过下一步来检查这个:

Emplyoee.limit(2).each{|e| e.image_full_url = "asdw"}.as_json

因此,输出不会包含:image_full_url属性。如果您希望该属性位于最终结果中,请添加到下一行:

.as_json(:methods => [:image_full_url])