我有以下小问题。
在布局中,我屈服于 content_for 在我的body标签上设置一些类:
<body class="<%= yield(:body_classes) %>
他们我想打电话给 content_for
<%= content_for(:body_classes, "one") %>
到目前为止一切顺利。我第二次使用 content_for :
<%= content_for(:body_classes, "two") %>
在我的HTML中,我得到以下内容:
<body class="onetwo">
有没有一种优雅的方法可以用空格分隔这两个类?我可以想到几个hacky解决方案,但没有什么感觉正确......
非常感谢!
答案 0 :(得分:2)
我不认为content_for
在这种情况下是合适的。但是,您可以使用几个辅助方法(从我的一个Rails项目中提取)优雅地解决问题:
def klass(*classes)
@classes = [] if @classes.nil?
@classes += classes
@classes.uniq!
nil
end
def has_klass?(klass)
!@classes.nil? && @classes.include?(klass)
end
def body_klasses
@classes.map(&:to_s).join(" ") rescue nil
end
模板中的用法:
<%= klass :one, :two %>
<%= klass :three %>
在布局中,确定是否设置了某个类:
<% if has_klass? :one %>
最后......
<body class="<%= body_klasses %>">
您可以进一步自定义这些以更好地满足您的需求。
答案 1 :(得分:0)
每次设置content_for
时,只需在课前(或之后)放置一个空格。
<% content_for(:body_classes, "one ") %>
顺便说一句,您可能不希望设置标记中包含=
;你通常不希望Rails将你要存储的内容输出到HTML中。
答案 2 :(得分:0)
也许你可以在添加内容之前检查:body_clases,如果已有内容,为了在添加新内容之前添加空间。
<% content_for(:body_classes,content_for?(:body_classes) ? ' one' : 'one') %>
<% content_for(:body_classes,content_for?(:body_classes) ? ' two' : 'two') %>
最终的Html将是:
<body class="one two">