在使用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”字段。我究竟做错了什么?任何人都可以帮忙吗?
答案 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])