Подтвердить что ты не робот

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 %>

Не должен ли работать первый метод или я что-то упустил?

4b9b3361

Ответ 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?.