避免视图中的逻辑
标准方法的问题在于它需要if 语句或视图中的三元组形式的逻辑。如果您有多个条件 CSS 类与默认类混合,那么您需要将该逻辑放入字符串插值或 ERB 标记中。
这是一种避免将任何逻辑放入视图的更新方法:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string方法
class_string 帮助器采用由 CSS 类名字符串和布尔值组成的键/值对的散列。该方法的结果是一串类,其中布尔值评估为真。
示例用法
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
其他用例
这个助手可以用在ERB标签中,也可以和link_to这样的Rails助手一起使用。
<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'),传递一个数组,其中第一个元素是true 的类,另一个是false 的类
<div class="<%= [:good, :bad] => @success %>">
受 React 启发
这项技术的灵感来自 Facebook 的 React 前端框架中名为 classNames(以前称为 classSet)的插件。
在 Rails 项目中使用
到目前为止,Rails 中不存在class_names 函数,但this article 向您展示了如何将其添加或实现到您的项目中。