首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何处理一个反复使用的代码块,其中包括ruby & CSS?

我应该如何处理一个反复使用的代码块,其中包括ruby & CSS?
EN

Stack Overflow用户
提问于 2016-10-28 05:02:16
回答 2查看 42关注 0票数 0

很长一段时间以来,我忽视了红宝石铁轨的干燥原理。我在不同的视图文件中反复使用相同的代码块:

代码语言:javascript
复制
<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 %>

不知道该怎么办?我把它放进去..。

代码语言:javascript
复制
module ApplicationHelper
  def banner
    # See Above Code Chunk
  end
end

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-28 06:28:48

创建CATEGORIES常量

代码语言:javascript
复制
CATEGORIES = {
  adventure: 'glyphicon-picture',
  health:    'glyphicon-heart',
  work:      'glyphicon-briefcase',
  gift:      'glyphicon-tree-deciduous'
}

CATEGORIES.default = 'glyphicon-glass'

创建部分

_flag.html.erb

代码语言:javascript
复制
<span class="glyphicon <%= class_name %>", id="challenge-flag"></span>

_link.html.erb

代码语言:javascript
复制
<%= link_to categorization_path(categorization: category) do %>    
  <%= render 'flag', class_name: class_name %>
<% end %>

并使用它们

代码语言:javascript
复制
<% category = challenge.categorization %>
<% class_name = CATEGORIES[category.to_sym] %>

<%= render 'link', class_name: class_name, category: category %>
票数 1
EN

Stack Overflow用户

发布于 2016-10-28 06:17:15

您可以在助手上定义以下方法:

代码语言:javascript
复制
def challenge_link(category)
  icon = case category
  when 'adventure' then 'picture'
  when 'health' then 'heart'
  when 'work' then 'briefcase'
  when 'gift' then 'tree-deciduous'
  else
    'glass'
  end

  link_to(categorization_path(categorization: category.to_sym)) do
    content_tag(:span, "", class: "glyphicon glyphicon-#{ icon }", id: "challenge-flag")
  end
end

然后像这样从视图中调用它:

代码语言:javascript
复制
<%= challenge_link('adventure') %>

关于css,只需确保challenge-accomplished-date-banner类足够通用,以便您可以在应用程序的几个区域重用它。

如果您想更进一步,可以考虑在控制器上的@challenge_notes@challenge_flag上定义before_action,并在视图中使用以下代码:

代码语言:javascript
复制
<div class="challenge-accomplished-date-banner">
  <%= @challenge_notes %>
</div>

<%= challenge_link('adventure') %>

<span class="glyphicon glyphicon-<%= @challenge_icon %>", id="challenge-flag"></span>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40298331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档