如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章