Вы можете использовать функции isnan
и isinf
.
Для создания чисел inf и -inf вы можете использовать 1.0 / 0.0 (должен давать inf) и -1.0 / 0.0 (должен давать -inf).
Пример:
#include <stdio.h>
#include <math.h>
int main() {
double x = 1.0/0.0;
double y = -1.0/0.0;
double z = sqrt(-1.0);
printf("x = %f\n", x);
printf("y = %f\n", y);
printf("isinf(x) = %d\n", isinf(x));
printf("isinf(y) = %d\n", isinf(y));
printf("isnan(x) = %d\n", isnan(x));
printf("isnan(z) = %d\n", isnan(z));
}
Существует пара способов обработать это. Конечно, наблюдать полевой подход один, но Вы могли также использовать простой JavaScript или remote_function, чтобы сделать это:
Вот простой подход JS:
<% remote_form_for membership do |f| %>
<%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit()' %>
<% end %>
Другой путь был бы чем-то вроде этого и будет сторониться конструктора форм (и это может иметь пару синтаксических ошибок):
<%= select_tag(:permissions, [['none', 0], ['admin', 9]], {:onchange => "#{remote_function(:url => permissions_path(:story_id => story,
:with => "'permission='+value")}"})
Лично я предпочитаю первого.
Три шага!
form_for
a remote_form_for
; добавьте идентификатор!observe_field
после Вашего select
observe_field
отправлять Вашу формуПоследний бит смотрит что-то как:
<%= observe_field "id_of_select", :function => "$('form_id').submit();" %>
Изучите, как сделать это без направляющих с помощью платформы по Вашему выбору. Используя теги направляющих для выполнения Ajax может выполнить задачу быстро, но может очень ограничивать, когда необходимо изменить определенные вещи о том, как тег работает.
Читайте о веб-стандартах и как записать незаметный JavaScript на этих сайтах: http://ajaxian.com/ http://www.alistapart.com/
Вы сможете создать более гибкий, удивительный UIs путем изучения, как выполнить Ajax без направляющих.