Rails 3.0.3 проверить, истинно ли логическое значение
Я хочу проверить, является ли значение истинным или ложным.
<% if item.active? %>
<%= image_tag('on.png', :alt => "Active", :border => 0) %>
<% else %>
<%= image_tag('off.png', :alt => "Inactive", :border => 0) %>
<% end %>
Это не работает, но это работает?
<% if item.active == true %>
<%= image_tag('on.png', :alt => "Active", :border => 0) %>
<% else %>
<%= image_tag('off.png', :alt => "Inactive", :border => 0) %>
<% end %>
Не должен ли работать первый метод или я что-то упустил?
Ответы
Ответ 1
если эта строка работает:
if item.active == true
то
if item.active
также будет работать. if item.active?
работает только в том случае, если существует метод, имя которого фактически active?
, что обычно является условным обозначением метода, который возвращает true или false.
Ответ 2
Это должно работать, если вы считаете, что item.active
действительно является логическим значением. Если не существует метода, определенного для item.active?
, ваш пример вернет ошибку no-method.
<% if item.active %>
<%= image_tag('on.png', :alt => "Active", :border => 0) %>
<% else %>
<%= image_tag('off.png', :alt => "Inactive", :border => 0) %>
<% end %>
Ответ 3
Другой способ - использовать одну строку, если еще
<%= active ? here is your statement for true : here is your statement for false %>
Чтобы active?
работал, в объекте предмета должен быть метод def active?
.