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

3 に答える 3

10

最良の方法は、プレゼンターまたはヘルパー メソッドを使用することです。とにかくあなたができるメタプログラミングを使って

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

または、 withunlessの代わりにを使用することもできますが、読みにくい場合を除いて、通常は を使用するコードを見つけますが、それは私だけです!if !blank?

于 2012-10-03T20:51:36.067 に答える
1

URL フィールドが nil の場合は、ここの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 に答える