我试图实现社交链接到我的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图标。如何对多个链接执行此操作,同时保持我的代码干燥?
答案 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
帮助者为我生成以下链接:
答案 1 :(得分:1)
你只有几个,对吧? ~5左右?在这种情况下,我不会过分担心保持代码DRY。不同链接的代码不同,足以使它不值得努力(不同的对象属性,css类等)。
您只显示了一个案例(github),但我可以很容易想象,在某些情况下,属性和css类不匹配(例如,user.google_plus
和fa-gplus
,或者某些东西)
只需重复代码5次并将其隐藏在部分代码中。
如果你坚持,那么@revgoat的回答应该是。