散列数组,其中散列由jbuilder

时间:2016-03-04 04:50:29

标签: ruby-on-rails ruby json jbuilder

我有一个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
}

1 个答案:

答案 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页面获取更多信息。