레일 : 열에 값이 있는지 어떻게 확인합니까?
-
08-07-2019 - |
문제
이것을 어떻게 달성 할 수 있습니까?
<% 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 가지 종류의 값을 가질 수 있습니다.
- 무 값, 즉 "nil"은 데이터베이스에 저장됩니다
- 비어 있는 가치 즉, ""빈 문자열 공간이 없습니다
- 비어 있는 끈 공간과 함께 " ".
- 데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.
다음은이 경우에 사용할 수있는 모든 현재 방법 (Ruby 2.2.2)의 세부 동작입니다.
첫 번째 방법 : .empty?
을 위한 무 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 :037 > object.attribute => "" 2.2.2 :025 > object.attribute.empty? true
비어 있는 끈 공간과 함께 " ".
2.2.2 :041 > object.attribute => " " 2.2.2 :042 > object.attribute.empty? => false
데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.
2.2.2 :045 > object.attribute => "some value" 2.2.2 :046 > object.attribute.empty? => false
두 번째 방법 : .nil?
무 값, 즉 "nil"은 데이터베이스에 저장됩니다
2.2.2 :049 > object.attribute => nil 2.2.2 :050 > object.attribute.nil? => true
비어 있는 가치 즉, ""빈 문자열 공간이 없습니다
2.2.2 :053 > object.attribute => "" 2.2.2 :054 > object.attribute.nil? => false
비어 있는 끈 공간과 함께 " ".
2.2.2 :057 > object.attribute => " " 2.2.2 :058 > object.attribute.nil? => false
데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.
2.2.2 :061 > object.attribute => "some value" 2.2.2 :062 > object.attribute.nil? => false
세 번째 방법 : .blank?
무 값, 즉 "nil"은 데이터베이스에 저장됩니다
2.2.2 :065 > object.attribute => nil 2.2.2 :066 > object.attribute.blank? => true
비어 있는 가치 즉, ""빈 문자열 공간이 없습니다
2.2.2 :069 > object.attribute => "" 2.2.2 :070 > object.attribute.blank? => true
비어 있는 끈 공간과 함께 " ".
2.2.2 :073 > object.attribute => " " 2.2.2 :074 > object.attribute.blank? => true
데이터베이스에 존재하는 값, 즉 a 비어 있지 않은 문자열.
2.2.2 :075 > object.attribute => "some value" 2.2.2 :076 > object.attribute.blank? => false
네 번째 방법 : .present?
무 값, 즉 "nil"은 데이터베이스에 저장됩니다
2.2.2 :088 > object.attribute => nil 2.2.2 :089 > object.attribute.present? => false
비어 있는 가치 즉, ""빈 문자열 공간이 없습니다
2.2.2 :092 > object.attribute => "" 2.2.2 :093 > object.attribute.present? => false
비어 있는 끈 공간과 함께 " ".
2.2.2 :096 > object.attribute => " " 2.2.2 :097 > object.attribute.present? => false
데이터베이스에 존재하는 값, 즉 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?
언뜻보기에 더 읽기 쉽고 이해하기 쉽습니다.