Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails HAML中一个元素的多个动态类_Ruby On Rails_Haml - Fatal编程技术网

Ruby on rails HAML中一个元素的多个动态类

Ruby on rails HAML中一个元素的多个动态类,ruby-on-rails,haml,Ruby On Rails,Haml,这是可行的,但很冗长。如何缩短这个 .service{:class=>[route.night??“night:”,route.school??“school:”]*“} 我希望此元素具有: class=“service”如果不是route.night?而不是route.school? class=“夜间服务”ifroute.night?而非route.school? class=“学校服务”如果没有route.night?和route.school? class=“学校夜间服务”ifrout

这是可行的,但很冗长。如何缩短这个

.service{:class=>[route.night??“night:”,route.school??“school:”]*“}

我希望此元素具有:

  • class=“service”
    如果不是
    route.night?
    而不是
    route.school?
  • class=“夜间服务”
    if
    route.night?
    而非
    route.school?
  • class=“学校服务”
    如果没有
    route.night?
    route.school?
  • class=“学校夜间服务”
    if
    route.night?
    route.school?
编辑:马特帮我将其缩短了三个字符:

.service{:class=>[route.night??“night:”,route.school??“school:”]}


还可以做什么?

我建议实现一个助手

def service_class_helper(route)
  classes = ['service']
  classes << 'night' if route.night?
  classes << 'school' if route.school?
  classes
end
如果不希望使用助手,可以使用类似

.service{:class => ['night', 'school'].select { |c| c if route.send("#{c}?") } }

这项工作非常简单。但也有一些明显的局限性。

您可以这样做:

.service{class: {night: route.night?, school: route.school?}.map{|k,v| k if v} }
或者,如果您可以重构
Route
类,您可以将其定义为:

class Route
  def initialize(night: false, school: false)
    @route_type = Set.new
    @route_type.add('night') if night
    @route_type.add('school') if school
  end

  def route_type
    @route_type.to_a
  end

  def night?
    @route_type.include? 'night'
  end

  def school?
    @route_type.include? 'school'
  end
end
现在你可以写作了

.service { class: route.route_type }

您不必调用
join
–如果您传递了
类的数组,Haml将为您加入它:谢谢您的想法,但我希望是更短的,而不是更长的。:)我不喜欢编写特定于视图的帮助器方法。@matt谢谢,我从末尾删除了“*”,现在短了一点。好吧,帮助器就是为了这个原因。提取一些逻辑以保持视图干净好的,我同意这是有助手的一个很好的理由,但我仍然希望有更简洁的东西。:)希望我不是天真的。什么是路线?它如何回答
学校?
夜间?
?@urigassi
路线
是一条公交路线,
学校?
意味着它是一条校车路线,
夜间?
意味着它是一条夜间路线。所以它是一个有两个布尔成员的类?
.service { class: route.route_type }