如何在 Rails 视图中干燥条件 content_for?

Posted

技术标签:

【中文标题】如何在 Rails 视图中干燥条件 content_for?【英文标题】:How can I DRY up conditional content_for in Rails view? 【发布时间】:2015-11-25 21:33:50 【问题描述】:

比赛/show.html.haml:

- if modal
  - content_for(:modal_header) do
    = render 'contests/contest_header'
  - content_for(:modal_body) do
    = render 'contests/contest_body'
- else
  = render 'contests/contest_header'
  = render 'contests/contest_body'

modal 是一个布尔值,表示视图是否在模态模板中呈现,而不是在常规应用程序模板中。模态有 content_for 块,而主应用程序模板没有:

布局/modal.html.haml:

-modal = true
.modal-header
  .row
    .col-xs-11
      = yield(:modal_header)
    .col-xs-1
      %button'type': 'button', 'class': 'close', 'data-dismiss': 'modal', 'aria-label': 'close'
        %span'aria-hidden': 'true' ×
.modal-body
  = render 'layouts/messages'
  - if content_for?(:modal_body)
    = yield(:modal_body)
  - else
    =yield

我正在寻找的是可以在modal 为假时有条件地使 content_for 块禁用的东西。而不是重复我的渲染语句。

【问题讨论】:

【参考方案1】:

从另一个 SO 答案中找到了解决方案! https://***.com/a/27398070/378622

这是我的实现

# app/helpers/application_helper.rb
def modal_content_for(name, &block)
  if params[:modal] == '1'
    content_for 'modal_' + name.to_s, nil, &block
  else
    capture_haml(&block)
  end
end

【讨论】:

以上是关于如何在 Rails 视图中干燥条件 content_for?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 中对常用视图代码进行分组和干燥

使用嵌套资源干燥 Rails 视图

您如何在 Rails 3.1 中使用 Sprockets 编写干燥的模块化咖啡脚本?

在 Rails 中处理视图和仅帮助程序常量的最佳方法

rails:保持干燥,达到什么水平? [关闭]

在 Rails 中使用条件显示视图元素