3

我来自 php,刚开始用 ruby​​ 和 rails 磨牙。

是否有更有效或更“红宝石”的方式来编写以下内容?

<% 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 %>
4

3 回答 3

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 %>

或者

<% [: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 %>

甚至:

<% [: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 %>
于 2012-10-03T20:52:40.757 回答
3

更紧凑的方式:

<%= link_to "Twitter", @user.twitter_url if !@user.twitter_url.blank?  %>
<%= link_to "Facebook", @user.facebook_url if !@user.facebook_url.blank?  %>
<%= link_to "Google Plus", @user.google_plus_url if !@user.google_plus_url.blank?  %>
<%= link_to "Linked In", @user.linked_in_url if !@user.linked_in_url.blank?  %>

礼物?相反,感谢 Mark Thomas 评论:

<%= link_to "Twitter", @user.twitter_url if @user.twitter_url.present?  %>
<%= link_to "Facebook", @user.facebook_url if !@user.facebook_url.present?  %>
<%= link_to "Google Plus", @user.google_plus_url if !@user.google_plus_url.present?  %>
<%= link_to "Linked In", @user.linked_in_url if !@user.linked_in_url.present?  %>

或者您可以使用unless而不是if !with blank?,但我通常会使用除非难以阅读的代码,否则就是我!

于 2012-10-03T20:51:36.067 回答
1

如果 url 字段为零,请在此处使用blank?而不是。empty?虽然nil.blank?已定义,但未定义nil.empty?

<% unless @user.twitter_url.blank? %>
    <%= link_to "Twitter", @user.twitter_url, class: "twitter" %>
<% end %>
<% unless @user.facebook_url.blank? %>
    <%= link_to "Facebook", @user.facebook_url, class: "facebook" %>
<% end %>
<% unless @user.google_plus_url.blank? %>
    <%= link_to "Google Plus", @user.google_plus_url, class: "googleplus" %>
<% end %>
<% unless @user.linked_in_url.blank? %>
    <%= link_to "Linked In", @user.linked_in_url, class: "linkedin" %>
<% end %>
于 2012-10-03T20:47:10.360 回答