Если вы не можете обработать возвращаемые значения, можете ли вы хотя бы добавить параметр в функцию: я могу представить решение, подобное этому:
void main (void)
{
int a = 0;
for (; 1 != a;)
{
foo(x, &a);
}
}
void foo( int x, int * a)
{
if (succeeded)
{
/* set the break condition*/
*a = 1;
}
else
{
*a = 0;
}
}
Это мой первый пост, поэтому, пожалуйста, простите меня, если мое форматирование испорчено :)
Сам Ruby не имеет перечислимого типа, но на этом сайте показан метод http://www.rubyfleebie.com/enumerations-and-ruby/
Вы можете сделать что-то подобное в своей модели User :
#constants
OWNER = 1
ADMIN = 2
USER = 3
def is_owner?
self.role == OWNER
end
def is_admin?
self.role == ADMIN
end
def is_user?
self.role == USER
end
Я предпочитаю использовать плагин с подходящим названием Authorization для таких ситуаций.
Это позволит вам
permit "role"
для ограничения доступа к ролям, и
permit? "role"
просто для проверки доступа. Оба они делегируют User # has_role? (Role)
.
Не думаю, что вам нужно использовать их реализацию ObjectRoles
. Вы можете использовать роли Hardwired
, а затем реализовать свой собственный метод User # has_role? (Role)
для использования существующей схемы.
На rubyforge есть плагин enum, так что вы делаете:
t.column :severity, :enum, :limit => [:low, :medium, :high, :critical]
Это довольно уродливо использовать атрибут :limit
для передачи параметров, но это более стандартизированный способ.
Для установки просто сделайте:
script/plugin install svn://rubyforge.org/var/svn/enum-column/plugins/enum-column
в настоящее время он работает с Rails 2.2.2 или более поздней версией. Ссылка на Rubyforge: www.rubyforge.org/projects/enum-column/