Rails 바로 가기에서 nil이 아니고 비어 있지 않은지 확인하십시오.
내 사용자에 대한 표시 페이지가 있으며 각 속성은 nil이 아니고 빈 문자열이 아닌 경우 해당 페이지에만 표시되어야합니다. 아래에는 컨트롤러가 있으며 @user.city != nil && @user.city != ""
모든 변수에 대해 동일한 코드 줄을 작성해야하는 것은 매우 성가신 일 입니다. 나만의 방법을 만드는 데 너무 익숙하지 않지만 어떻게 든 다음과 같은 작업을 수행하는 바로 가기를 만들 수 있습니다 @city = check_attr(@user.city)
. 아니면이 절차를 단축하는 더 좋은 방법이 있습니까?
users_controller.rb
def show
@city = @user.city != nil && @user.city != ""
@state = @user.state != nil && @user.state != ""
@bio = @user.bio != nil && @user.bio != ""
@contact = @user.contact != nil && @user.contact != ""
@twitter = @user.twitter != nil && @user.twitter != ""
@mail = @user.mail != nil && @user.mail != ""
end
이 작업을 수행하는 방법이 있습니다.
def show
@city = @user.city.present?
end
present?
NOT-위한 방법 테스트 nil
플러스가 콘텐츠입니다. 빈 문자열, 공백 또는 탭으로 구성된 문자열은없는 것으로 간주됩니다.
이 패턴은 매우 일반적이기 때문에 ActiveRecord에는 바로 가기도 있습니다.
def show
@city = @user.city?
end
이것은 거의 동일합니다.
참고로 테스트 vs nil
는 거의 항상 중복됩니다. 이 두 논리적으로 거짓 값은 루비에 : nil
와 false
. 변수가 literal false
일 수 없다면 이것으로 충분합니다.
if (variable)
# ...
end
이것은 평상시 if (!variable.nil?)
또는 if (variable != nil)
가끔 나타나는 것 보다 바람직합니다 . 루비는 더 환원주의적인 표현을하는 경향이 있습니다.
당신이 대를 비교하려는 것 한 가지 이유는 nil
당신이 할 수있는 트라이 상태 변수가있는 경우이다 true
, false
또는 nil
당신이 마지막 두 상태 사이를 구별 할 필요가있다.
.present 를 사용할 수 있습니까? ActiveSupport에 포함되어 있습니다.
@city = @user.city.present?
# etc ...
이렇게 쓸 수도 있어요
def show
%w(city state bio contact twitter mail).each do |attr|
instance_variable_set "@#{attr}", @user[attr].present?
end
end
비어있는 것이 있는지 테스트하려면 사용할 수 있습니다 .blank?
(이는의 반대입니다 .present?
).
또한 foo == nil
. foo.nil?
대신 사용하십시오 .
참고 URL : https://stackoverflow.com/questions/22970057/check-if-not-nil-and-not-empty-in-rails-shortcut
'Development Tip' 카테고리의 다른 글
Google 경고 : 리소스가 글꼴로 해석되지만 MIME 유형 application / octet-stream으로 전송 됨 (0) | 2020.11.06 |
---|---|
Apache가 XAMPP 제어판에서 실행되고 있지 않습니다 (오류 : Apache가 예기치 않게 종료되었습니다. 포트가 차단 되었기 때문일 수 있음) (0) | 2020.11.06 |
Self를 반환하는 프로토콜 func (0) | 2020.11.06 |
인터페이스 구현에서 정적 변수의 의미는 무엇입니까? (0) | 2020.11.06 |
하나의 쿼리로 두 테이블에서 삭제 (0) | 2020.11.06 |