社交图标的干燥代码

时间:2016-06-22 08:55:08

标签: ruby-on-rails ruby dry

我试图实现社交链接到我的rails应用程序,但我开始意识到它会有点重复。如果用户提供链接,我希望显示相应的图标。

这是我到目前为止所拥有的。

aws s3 sync s3://sourcebucket s3://destinationbucket

只有当<% unless @user.github == nil %> <%= link_to @user.github , class: 'btn btn-social-social btn-github' do %> <span class="fa fa-github"></span> <% end %> <% end %> 不是零时,才会显示Github图标。如何对多个链接执行此操作,同时保持我的代码干燥?

2 个答案:

答案 0 :(得分:2)

您可以为此定义一个帮助:

def social_icon_helper(user, service)
  if user.respond_to?(service) && !user.send(service).nil?
    link_to user.send(service), class: "btn btn-social-social btn-#{service}" do
      content_tag(:span, class: "fa fa-#{service}")
    end
  end
end

然后在你看来:

<p>
  <%= social_icon_helper(@user, :github) %>
</p>

甚至

<% %i(github facebook twitter).each do |service| %>
  <%= social_icon_helper(@user, service) %>
<% end %>

<强>更新

抱歉,请查找更新的帮助程序代码。请注意,我在标记定义后添加了" #{service}"

def social_icon_helper(user, service)
  if user.respond_to?(service) && !user.send(service).nil?
    link_to user.send(service), class: "btn btn-social-social btn-#{service}" do
      content_tag(:span, " #{service}", class: "fa fa-#{service}")
    end
  end
end

帮助者为我生成以下链接:

github link

答案 1 :(得分:1)

你只有几个,对吧? ~5左右?在这种情况下,我不会过分担心保持代码DRY。不同链接的代码不同,足以使它不值得努力(不同的对象属性,css类等)。

您只显示了一个案例(github),但我可以很容易想象,在某些情况下,属性和css类不匹配(例如,user.google_plusfa-gplus,或者某些东西)

只需重复代码5次并将其隐藏在部分代码中。

如果你坚持,那么@revgoat的回答应该是。