문제

이것을 어떻게 달성 할 수 있습니까?

<% for agent in @broker.agents %>
  ...
  <% if agent.cell %><span class="cell-number">Cell: <%= agent.cell %></span><% end %>
  ...
<% end %>

에이전트에 셀 번호가 있는지 확인하고 조건부 내부에있는 내용을 표시하기 위해 테스트하고 싶습니다. 내가 현재 작동하지 않는 것 같습니다. "셀 :"만 표시합니다.

생각?

도움이 되었습니까?

해결책

이것이 당신이 요청한 것입니다.

<% for agent in @broker.agents %>
  <% unless agent.cell.blank? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
<% end %>

세포? 메소드는 셀이 nil인지 빈 문자열인지 여부에 관계없이 작동합니다. Rails는 모든 ActiveRecord 속성에 대해 유사한 기능을 추가합니다. 이것은 조금 더 멋지게 보일 것입니다 :

<% for agent in @broker.agents %>
  <span class="cell-number">
    Cell: <%= agent.cell? ? "none given" : agent.cell %>
  </span>
<% end %>

물음표와 결장은 빠른 "if? then : else"문을 형성합니다. 하나는 메소드 이름 셀의 일부이기 때문에 위의 코드에는 두 개의 물음표가 있습니까? 다른 하나는 if/the/else 구성의 일부입니다.

다른 팁

이 질문에 대해 매우 자세한 답변을하고 있습니다. "열에 값이 있는지 확인하려면 어떻게합니까?".

우선, 속성은 4 가지 종류의 값을 가질 수 있습니다.

  1. 값, 즉 "nil"은 데이터베이스에 저장됩니다
  2. 비어 있는 가치 즉, ""빈 문자열 공간이 없습니다
  3. 비어 있는공간과 함께 " ".
  4. 데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.

다음은이 경우에 사용할 수있는 모든 현재 방법 (Ruby 2.2.2)의 세부 동작입니다.

첫 번째 방법 : .empty?

  1. 을 위한 value =>은 예외를 던졌습니다

    2.2.2 :037 > object.attribute
    => nil
    2.2.2 :025 > object.attribute.empty?
    NoMethodError: undefined method `empty?' for nil:NilClass
    
  2. 을 위한 비어 있는 가치 즉, ""빈 문자열 공간이 없습니다

    2.2.2 :037 > object.attribute
    => ""
    2.2.2 :025 > object.attribute.empty?
    true
    
  3. 비어 있는공간과 함께 " ".

    2.2.2 :041 > object.attribute
    => " " 
    2.2.2 :042 > object.attribute.empty?
    => false
    
  4. 데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.

    2.2.2 :045 > object.attribute
     => "some value" 
    2.2.2 :046 > object.attribute.empty?
     => false 
    

두 번째 방법 : .nil?

  1. 값, 즉 "nil"은 데이터베이스에 저장됩니다

    2.2.2 :049 > object.attribute
     => nil 
    2.2.2 :050 > object.attribute.nil?
     => true
    
  2. 비어 있는 가치 즉, ""빈 문자열 공간이 없습니다

    2.2.2 :053 > object.attribute
     => "" 
    2.2.2 :054 > object.attribute.nil?
     => false 
    
  3. 비어 있는공간과 함께 " ".

    2.2.2 :057 > object.attribute
     => " " 
    2.2.2 :058 > object.attribute.nil?
     => false 
    
  4. 데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.

    2.2.2 :061 > object.attribute
     => "some value" 
    2.2.2 :062 > object.attribute.nil?
     => false
    

세 번째 방법 : .blank?

  1. 값, 즉 "nil"은 데이터베이스에 저장됩니다

    2.2.2 :065 > object.attribute
     => nil 
    2.2.2 :066 > object.attribute.blank?
     => true
    
  2. 비어 있는 가치 즉, ""빈 문자열 공간이 없습니다

    2.2.2 :069 > object.attribute
     => "" 
    2.2.2 :070 > object.attribute.blank?
     => true 
    
  3. 비어 있는공간과 함께 " ".

    2.2.2 :073 > object.attribute
     => " " 
    2.2.2 :074 > object.attribute.blank?
     => true 
    
  4. 데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.

    2.2.2 :075 > object.attribute
     => "some value" 
    2.2.2 :076 > object.attribute.blank?
     => false 
    

네 번째 방법 : .present?

  1. 값, 즉 "nil"은 데이터베이스에 저장됩니다

    2.2.2 :088 > object.attribute
     => nil 
    2.2.2 :089 > object.attribute.present?
     => false
    
  2. 비어 있는 가치 즉, ""빈 문자열 공간이 없습니다

    2.2.2 :092 > object.attribute
     => "" 
    2.2.2 :093 > object.attribute.present?
     => false
    
  3. 비어 있는공간과 함께 " ".

    2.2.2 :096 > object.attribute
     => " " 
    2.2.2 :097 > object.attribute.present?
     => false 
    
  4. 데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.

    2.2.2 :100 > object.attribute
     => "some value" 
    2.2.2 :101 > object.attribute.present?
     => true 
    

직면 한 상황에 따라 4 개 중 하나를 사용할 수 있습니다.

감사

if !agent.cell.blank?

효과가있다.

에이전트 .Cell? Agent.cell.blank와 동일하게 작동하는 것 같습니다. ROR에서.

<% @broker.agents.each do |agent| %>
  ...
  <% unless agent.cell.empty? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
  ...
<% end %>

#Each의 사용을 찾았습니다. unless, 그리고 cell.empty? 언뜻보기에 더 읽기 쉽고 이해하기 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top