2012-10-03 5 views
3

나는 PHP에서 왔으며 루비와 레일로 내 이빨을 자르기 시작했습니다.Ruby에서 이것을 더 효율적으로 쓸 수있는 방법이 있습니까?

더 효율적이거나 '루비'방식으로 다음을 작성하는 방법이 있습니까?

<% if [email protected]_url.empty? %> 
    <a class="twitter" href="<%= @user.twitter_url %>">Twitter</a> 
<% end %> 
<% if [email protected]_url.empty? %> 
    <a class="facebook" href="<%= @user.facebook_url %>">Facebook</a> 
<% end %> 
<% if [email protected]_plus_url.empty? %> 
    <a class="googleplus" href="<%= @user.google_plus_url %>">Google Plus</a> 
<% end %> 
<% if [email protected]_in_url.empty? %> 
    <a class="linkedin" href="<%= @user.google_plus_url %>">Linked In</a> 
<% end %> 

답변

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

또는 할 수있는 메타 프로그래밍을 사용하여 : @ user.twitter_url.present 경우 나는`사용하십시오 제외

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

사용 blank? 대신 여기 empty?이 경우의 URL 필드는 전무하다. 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 %> 
3

더 컴팩트 방법 : 대신 present?

<%= link_to "Twitter", @user.twitter_url if [email protected]_url.blank? %> 
<%= link_to "Facebook", @user.facebook_url if [email protected]_url.blank? %> 
<%= link_to "Google Plus", @user.google_plus_url if [email protected]_plus_url.blank? %> 
<%= link_to "Linked In", @user.linked_in_url if [email protected]_in_url.blank? %> 

, 마크 토마스 코멘트에 감사 :

<%= link_to "Twitter", @user.twitter_url if @user.twitter_url.present? %> 
<%= link_to "Facebook", @user.facebook_url if [email protected]_url.present? %> 
<%= link_to "Google Plus", @user.google_plus_url if [email protected]_plus_url.present? %> 
<%= link_to "Linked In", @user.linked_in_url if [email protected]_in_url.present? %> 

또는 당신은 blank?unless 대신 if ! 사용할 수 있지만 일반적으로 발견 코드를 읽기가 힘들지 만 않는 한 사용하면된다.

+1

일을'대신 부정 'blank? ' –

+0

맞습니다, 존재하는 것을 잊었습니까? Rails! –

+0

왜 선물이 있습니까? 보다 나은? http://api.rubyonrails.org/classes/Object.html#method-i-present-3F를보고 소스를 보여주는 것은 공백과 같지 않습니까? 그것도 동일하면 네이티브 블랭크를 사용하지 않겠습니까? 더 빨라? 또는 나는 뭔가를 오해하고있다 (나는 루비/레일 멍청한 놈이다.) – JonathanW

관련 문제