css - 我应该如何处理包含 ruby​​ 和 CSS 的重复使用的代码块?

标签 css ruby-on-rails ruby dry helper

我很长一段时间都忽略了 ruby​​ on rails 的 DRY 原则。我在不同的 View 文件中反复使用相同的代码块:

<div class="challenge-accomplished-date-banner">
  <% if @correct_user %>
    <%= challenge.notes.count.to_s.rjust(2, "0") %>
  <% else %>
    <%= challenge.notes.publish.count.to_s.rjust(2, "0") %>
  <% end %>
</div>
<% if challenge.categorization == "adventure" %>
  <%= link_to categorization_path(categorization: :adventure) do %>
    <span class="glyphicon glyphicon-picture", id="challenge-flag"></span>
  <% end %>
<% elsif challenge.categorization == "health" %>
  <%= link_to categorization_path(categorization: :health) do %>   
    <span class="glyphicon glyphicon-heart", id="challenge-flag"></span>
  <% end %>            
<% elsif challenge.categorization == "work" %>
  <%= link_to categorization_path(categorization: :work) do %>    
    <span class="glyphicon glyphicon-briefcase", id="challenge-flag"></span>
  <% end %>
<% elsif challenge.categorization == "gift" %>
  <%= link_to categorization_path(categorization: :gift) do %>    
    <span class="glyphicon glyphicon-tree-deciduous", id="challenge-flag"></span>
  <% end %>
<% else %>
  <%= link_to categorization_path(categorization: :wacky) do %>    
    <span class="glyphicon glyphicon-glass", id="challenge-flag"></span>
  <% end %>
<% end %>
<% if challenge.duels.present? && challenge.duels.last.duelers.order(id: :asc).last.accept =! false %>
  <span class="glyphicon glyphicon-tower", id="challenge-flag"></span>
<% elsif challenge.conceal == true %>
  <span class="glyphicon glyphicon-eye-close", id="challenge-flag"></span>
<% else %>
  <span class="glyphicon glyphicon-eye-open", id="challenge-flag"></span>      
<% end %>

不知道该怎么办?我把它放在...

module ApplicationHelper
  def banner
    # See Above Code Chunk
  end
end

但它不适用于 CSS?有没有办法在助手中允许 CSS?或者我是否将这段代码放在模型中的其他地方,但后来我遇到了同样的 CSS 问题?谢谢!

最佳答案

创建一个CATEGORIES常量

CATEGORIES = {
  adventure: 'glyphicon-picture',
  health:    'glyphicon-heart',
  work:      'glyphicon-briefcase',
  gift:      'glyphicon-tree-deciduous'
}

CATEGORIES.default = 'glyphicon-glass'

创建部分

_flag.html.erb

<span class="glyphicon <%= class_name %>", id="challenge-flag"></span>

_link.html.erb

<%= link_to categorization_path(categorization: category) do %>    
  <%= render 'flag', class_name: class_name %>
<% end %>

并使用它们

<% category = challenge.categorization %>
<% class_name = CATEGORIES[category.to_sym] %>

<%= render 'link', class_name: class_name, category: category %>

关于css - 我应该如何处理包含 ruby​​ 和 CSS 的重复使用的代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40298331/

相关文章:

php - 使用 calc() 的网格显示额外的像素

css - 在 Rails 4.2.4 中使用字体

ruby-on-rails - ActiveJob - MyJob.new.perform 和 MyJob.perform_now 之间有什么区别?

ruby - 如何测试使用 rspec 的 block 的函数

javascript - 获取特定字段的 json 数据并存储在文件中

css - Javascript 的调用废墟在 Firefox 中 float

javascript - 使用 chrome 浏览器双击时如何删除地址元素突出显示?

ruby-on-rails - 从另一个 Controller 创建 ActiveRecord 对象 - 我做对了吗?

ruby-on-rails - Gem install bundler && bundle 安装报错

java - Vaadin 14 应用程序中的背景图像无法加载