Перечислимые типы направляющих или альтернативы

Если вы не можете обработать возвращаемые значения, можете ли вы хотя бы добавить параметр в функцию: я могу представить решение, подобное этому:

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;
  }
}

Это мой первый пост, поэтому, пожалуйста, простите меня, если мое форматирование испорчено :)

26
задан Jason 26 May 2009 в 04:17
поделиться

3 ответа

Сам 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
26
ответ дан 28 November 2019 в 07:12
поделиться

Я предпочитаю использовать плагин с подходящим названием Authorization для таких ситуаций.

Это позволит вам

permit "role" 

для ограничения доступа к ролям, и

permit? "role"

просто для проверки доступа. Оба они делегируют User # has_role? (Role) .

Не думаю, что вам нужно использовать их реализацию ObjectRoles . Вы можете использовать роли Hardwired , а затем реализовать свой собственный метод User # has_role? (Role) для использования существующей схемы.

2
ответ дан 28 November 2019 в 07:12
поделиться

На 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/

0
ответ дан 28 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: