2010-11-25 2 views
20

Я хочу проверить, истинно или ложно.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 %> 

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

Благодаря ...

+2

Я знаю, что вы уже приняли ответ, но мне интересно, что вы подразумеваете под «не работает»? Кроме того, помните, что «истина» в рубине означает «все (!), Кроме false и nil». Например, 0, «0», пустой массив и т. Д. Все представляют правду. Может, в этом и проблема? – Arsen7 2010-11-25 13:13:02

ответ

45

если работает эта линия:

if item.active == true 

затем

if item.active 

также будут работать. if item.active? работает только в том случае, если существует метод, имя которого фактически равно active?, что обычно является условным обозначением метода, который возвращает true или false.

+6

Как и в сторону, рельсы добавляются в ? метод для булевых полей. Это вернет false, если для значения установлено значение false (т. Е. 0/f/whatever) или nil. Итак, если у вас есть активный атрибут, основанный на поле логической базы данных, то .active? *должно сработать. Вообще, хотя, лучше просто сказать «если item.active», как предлагает 動靜.. – 2010-11-25 10:24:04

1

Это должно работать для вас, если item.active действительно является логическим значением. Если не существует метода, определенного для item.active?, ваш пример вернет ошибку не-метода.

<% if item.active %> 
    <%= image_tag('on.png', :alt => "Active", :border => 0) %> 
<% else %> 
    <%= image_tag('off.png', :alt => "Inactive", :border => 0) %> 
<% end %> 
Смежные вопросы