【问题标题】:Including other one jbuilder template in another在另一个中包含另一个 jbuilder 模板
【发布时间】:2015-07-17 14:32:35
【问题描述】:

考虑以下show.json.jbuilder 模板:

json.user do |json|
    json.extract! @user, :id, :username, :email, :created_at, :avatar
end

json.policies do |json|
    json.array!(@policies) do |policy|
        json.extract! policy, :id, :title, :cached_votes_score
    end
end

json.liked do |json|
    json.array!(@liked) do |policy|
        json.extract! policy, :id, :title, :cached_votes_score
    end
end

json.disliked do |json|
    json.array!(@disliked) do |policy|
        json.extract! policy, :id, :title, :cached_votes_score
    end
end

是否可以将它们分成四个不同的模板,然后将它们包含在show 模板中?比如:

include template_user
include template_policies
include template_liked
include template_disliked

如果这是不可能的,有什么替代方法可以创建更模块化的 jbuilder 代码?我发现我的 jbuilder 代码非常不干。

【问题讨论】:

    标签: ruby-on-rails json jbuilder


    【解决方案1】:

    是的。是可能的。拆分您的文件,例如:

    _user.json.jbuilder

    json.user do |json| json.extract! @user, :id, :username, :email, :created_at, :avatar end

    _policies.json.jbuilder

    json.policies do |json| json.array!(@policies) do |policy| json.extract! policy, :id, :title, :cached_votes_score end end

    _liked.json.jbuilder

    json.liked do |json| json.array!(@liked) do |policy| json.extract! policy, :id, :title, :cached_votes_score end end

    _disliked.json.jbuilder

    json.disliked do |json| json.array!(@disliked) do |policy| json.extract! policy, :id, :title, :cached_votes_score end end

    然后你可以简单地加入他们:

    show.json.jbuilder

    json.partial! 'user' json.partial! 'policies' json.partial! 'liked' json.partial! 'disliked'

    但我建议对它们进行一些改进并使用局部变量来编写它们:

    _user.json.jbuilder

    json.user do |json| json.extract! user, :id, :username, :email, :created_at, :avatar end

    你把它作为参数传递给用户:

    json.partial! 'user', user: @user

    【讨论】:

    • 这太好了,感谢关于局部变量的说明!一个后续问题:是否可以包含名称不以下划线开头的部分?
    • 没有。部分有一个下划线作为第一个字符,否则是视图。
    • 是的,我希望能够在某些情况下将视图用作视图,或者在其他情况下用作部分视图。我意识到我可以通过在部分控制器方法中简单地调用render template: ... 来做到这一点,但我希望能够避免这种情况。
    • 你不想那样做。在概念上和架构上都是错误的。只需制作一个呈现单个部分的视图并重用部分
    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2018-02-02
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多