使用rails中的helper方法向HAML标记添加动态属性

时间:2012-06-05 17:56:55

标签: ruby-on-rails haml

所以我想出了一种方法,但有更简单的方法吗? 我想要做的只是在%th标签之后添加.class如果params [:sort] == sortBy,我真的需要在helper方法中使用其余的HAML吗?

这是我的helper.rb文件的辅助方法:

def yellow?(sortBy,name,id)
  haml_tag :th, class: "#{'hilite' if params[:sort]== sortBy}" do
    haml_concat link_to name, movies_path(sort: sortBy),{:id => id}
  end
end

这来自我的HAML文件:

%tr
  - yellow?("title","Movie Title","title_header")
  %th Rating

2 个答案:

答案 0 :(得分:8)

您是否尝试过此解决方案:

%tr
  %th{ :class => if params[:sort] == 'sortBy' then 'hilite' end }
    = link_to "Movie Title", movies_path(:sort => 'title'), :id => "title_header"
  %th Rating

您可以将此声明:if params[:sort] == 'sortBy' then 'hilite' end移至帮助程序。看看我的类似答案:haml two spaces issue

答案 1 :(得分:2)

你也可以这样做:

应用程序/助手/ some_helper.rb

def hilite
  params[:sort] == 'sortBy' ? { class: 'hilite' } : {}
end

应用程序/视图/ some.html.haml

%tr
  %th{ hilite }
    = link_to "Movie Title", movies_path(:sort => 'title'), :id => "title_header"
  %th Rating

我使用这种方法制作一个span_field_opts助手,通过Bootstrap类模仿一个禁用的字段:

def span_field_opts
  { class: "form-control cursor-none", disabled: true }
end

参考:https://coderwall.com/p/_jiytg/conditional-html-tag-attribute-in-haml