我来自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 %>
答案 0 :(得分: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 %>
答案 1 :(得分: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? %>
代替present?,感谢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 !
与blank?
,但我通常会发现代码使用除非难以阅读,这就是我!
答案 2 :(得分:1)
如果网址字段为零,请使用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 %>