2013-11-20 4 views
2

Это действительно начинает выглядеть повторяющимся и громоздкие, когда я делаю что-то вроде:Более короткий способ сделать x.present? ? х: г

Name: <%= @user.name.present? ? @user.name : "Unknown" %> 

Я знаю, что могу сделать @user.name || "Unknown" но не обрабатывает пустые строки, насколько я знаю.

Есть ли более короткий подход?

+0

Вы, возможно, ищут '' .empty, но уверен, что Rails? есть что-то добавленное, чтобы улучшить это. :) – vgoff

+0

Только для вашей информации только «nil» и «false» оцениваются как ложные в булевых выражениях, т. Е. пустая строка - «истина». –

ответ

6
<%= @user.name.presence || "Unknown" %> 

с рельсов официальной документации:

присутствие()

Возвращает объект, если он присутствует? иначе возвращает nil. object.presence эквивалентен object.present? ? объект: ноль.

http://api.rubyonrails.org/classes/Object.html#method-i-presence

+0

Большое вам спасибо! – Ryan

0

Вы можете добавить вспомогательный метод

def view_name(user, default="Unknown") 
    user.name.present? ? @user.name : default 
end 

, чтобы ваш взгляд просто:

Name: <%= view_name(@user) %> 
Смежные вопросы