使用.map
时返回一个数组<li class="mix <%= p.sectors.map {|s| "#{s.name}"} %> all">
给出数组
["Content Management System", "Web Design", "Web Development"]
目前我视图中返回的结果是
<li class="mix ["Content Management System", "Web Design", "Web Development"] all mix_all" </li>
我想要实现的是将每个s.name用作类名,但是在使用
时我遇到了问题<li class="mix <%= p.sectors.map {|s| "#{s.name}"}.join(" ") %> all">
其中每个单词都被视为一个单独的类,因此Web Design现在是两个类而不是一个
有没有办法让Web Design成为一个类,还是我需要使用不同的命名约定,比如Web-Design才能使它工作?
任何帮助表示赞赏
由于
答案 0 :(得分:4)
这应该有效:
mix <%= p.sectors.map { |s| s.name.gsub(/\s+/, '-') }.join(' ') %>
答案 1 :(得分:3)
您不能拥有包含空格的班级名称。因此,您需要将短语转换为类名。类名通常是低级的(虽然这不是一个要求)并且用连字符分隔(而不是下划线,尽管这不是一个要求,只是一个惯例)。
所以,你可以按如下方式将它们按顺序连接和连字符分开
<li class="mix <%= p.sectors.map{|sector| sector.name.downcase.gsub(/[^a-z0-9\-]+/, '-') }.join(' ') %> all">
我的正则表达式将用连字符替换1个或多个不是字母,数字或连字符的实例,因此结果应为
<li class="mix content-management-system web-design web-development all mix_all">
您可以将其移入模型中:
#in Sector class
def html_classname
self.name.downcase.gsub(/[^a-z0-9\-]+/, '-')
end
然后将视图代码更改为
<li class="mix <%= p.sectors.map(&:html_classname).join(' ') %> all">