我有一个PORO TutorProfileHandler
,它有一个返回哈希值的函数json
。
class TutorProfileHandler
def initialize(opts)
@profile = opts[:tutor_profile]
end
def json
tutor = @profile.tutor
return {
id: tutor.id,
first_name: tutor.first_name,
last_name: tutor.last_name.first + '.',
school: @profile.school,
avatar: @profile.avatar.url,
bio: @profile.bio,
academic_level: @profile.academic_level,
headline: @profile.headline,
major: @profile.major,
rate: @profile.rate,
rating: @profile.rating,
courses: JSON.parse(@profile.courses),
video_url: @profile.video_url
}
end
end
在我的index_tutor_profiles.json.jbuilder
中,我想生成
{
tutor_profile: [{id: 1, ...}, {id: 2, ...}, ...],
tutor_sum: 20
}
但是当我这样做时
json.tutor_profiles (@tutor_profiles) do |profile|
TutorProfileHandler.new({tutor_profile: profile}).json
end
json.tutor_sum @tutor_sum
它为tutor_profiles
提供了一个空数组。
但是,如果我将所有内容从TutorProfileHandler.json
移动到jbuilder
文件,则可以正常运行。如何在jbuilder数组中显式包含TutorProfileHandler.json
返回的哈希?
注意:这会返回一个数组,但会创建一个新的键值对array:
json.tutor_profiles json.array(@tutor_profiles) do |profile|
TutorProfileHandler.new({tutor_profile: profile}).json
end
结果:
{
array: [{id: 1, ...}, {id: 2, ...}, ...],
tutor_profile: [],
tutor_sum: 20
}
答案 0 :(得分:0)
有一种丑陋的方法:
json.tutor_profiles @tutor_profiles do |profile|
tmp_json = TutorProfileHandler.new({tutor_profile: profile}).json
json.(tmp_json, *(tmp_json.keys))
end
我认为最好的做法是在模型中直接嵌套。您可以从其github页面获取更多信息。