Возможно:
<% if @club && @club.name %>
<%= @club.name %>
<% else %>
clubs:
<% end %>
Поскольку @club
предположительно либо будет установлен на объект Club
, либо будет установлен на nil
, нам не нужно явно проверять, есть ли у @club
метод name
. Вместо этого мы можем просто проверить, что @club
установлен на всех, и для этого будет достаточно проверки на правдивость.
Аналогично, нам не нужна явная проверка nil
на @club.name
. Все значения, кроме false
и nil
, считаются «правдивыми», и, поскольку название клуба предположительно не может быть установлено на false
, просто проверка его правдивости эквивалентна явной проверке, является ли она nil
.
В своих комментариях Вайолет указала, что на самом деле это довольно распространенная идиома в мире Rails, поэтому ярлык на самом деле существует. В среде Rails все объекты, включая nil
, имеют метод с именем try
. try
вызывает имя метода, переданное ему в качестве аргумента, и либо возвращает возвращаемое значение этого метода, либо nil
, если этот метод не определен.
Так, например:
no_name = Club.new
no_name.try(:name) # => nil
so = Club.new :name => 'StackOverflow'
so.try(:name) # => "StackOverflow"
nil.try(:name) # => nil
Таким образом, следующее является точным эквивалентом первого блока кода:
<% if @club.try(:name) %>
<%= @club.name %>
<% else %>
clubs:
<% end %>
намного красивее:)