在视图中避免逻辑
标准方法的问题在于,它需要if
视图中的语句或三元形式的逻辑。如果您将多个条件CSS类与默认类混合在一起,则需要将该逻辑放入字符串插值或ERB标签中。
这是一种更新的方法,可避免在视图中添加任何逻辑:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string
方法
该class_string
助手负责与包括键/值对的哈希CSS类名字符串和布尔值。该方法的结果是一串类,其中布尔值评估为true。
样品用量
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
其他用例
可以在ERB
标记内使用该帮助器,也可以将其与Rails助手一起使用link_to
。
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
<% div_for @person, class: class_string(ok: @success) do %>
<% end %>
<% link_to "Hello", root_path, class: class_string(ok: @success) do %>
<% end %>
类别
对于需要三进制的用例(例如@success ? 'good' : 'bad'
),传递一个数组,其中第一个元素是for的类,true
另一个是for的类false
<div class="<%= [:good, :bad] => @success %>">
受React启发
这项技术的灵感来自Facebook 前端框架中的一个插件classNames
(以前称为classSet
)React
。
在Rails项目中使用
到目前为止,该class_names
功能在Rails中不存在,但是本文向您展示了如何在项目中添加或实现它。