有没有更有效/正确的方法在Ruby中编写它?

Jon*_*anW 3 ruby ruby-on-rails ruby-on-rails-3

我来自php,我刚开始用红宝石和铁轨切割牙齿.

编写以下内容是否有更高效或更"红宝石"的方式?

<% if !@user.twitter_url.empty? %>
    <a class="twitter" href="<%= @user.twitter_url %>">Twitter</a>
<% end %>
<% if !@user.facebook_url.empty? %>
    <a class="facebook" href="<%= @user.facebook_url %>">Facebook</a>
<% end %>
<% if !@user.google_plus_url.empty? %>
    <a class="googleplus" href="<%= @user.google_plus_url %>">Google Plus</a>
<% end %>
<% if !@user.linked_in_url.empty? %>
    <a class="linkedin" href="<%= @user.google_plus_url %>">Linked In</a>
<% end %>
Run Code Online (Sandbox Code Playgroud)

Ism*_*reu 10

最好的方法应该是使用一些Presenter或者一个帮助方法.无论如何使用元编程你可以做到

<% [:twitter, :facebook, :google_plus, :linked_in].each do |social| %>
  <% unless @user.send("#{social}_url").blank? %>
    <a class="<%= social %>" href="<%= @user.send("#{social}_url") %>">social.to_s.titleize </a>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

要么

<% [:twitter, :facebook, :google_plus, :linked_in].each do |social| %>
  <%= link_to(social.to_s.titleize , @user.send("#{social}_url"), class: social) unless @user.send("#{social}_url").blank? %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

甚至:

<% [:twitter, :facebook, :google_plus, :linked_in].each do |social| %>
  <%= link_to_unless @user.send("#{social}_url").blank?, social.to_s.titleize , @user.send("#{social}_url"), class: social %>
<% end %>
Run Code Online (Sandbox Code Playgroud)