Перечень в рубинах по рельсам - PullRequest
2 голосов
/ 04 июня 2010

Я программист на C # и ищу ruby ​​на рельсах. но у меня, возможно, возникли некоторые проблемы с настроением или чем-то в этом роде.

У меня есть объект голосования, этот объект может быть Pro, Neutral или Con.

Я бы сделал так, чтобы у объекта голосования было поле, похожее на это

private VoteEnum voteEnum = VoteEnum.Neutral

как же я могу сделать это в рубине.

Я нашел несколько примеров, таких как:

def MyClass < ActiveRecord::Base
  ACTIVE_STATUS = "active"
  INACTIVE_STATUS = "inactive"
  PENDING_STATUS = "pending"
end

Затем, при использовании модели из другого класса, я ссылаюсь на константы

@model.status = MyClass::ACTIVE_STATUS
@model.save

Мне кажется, это правильно, но мой главный вопрос - как мне сказать модели, что статус - это тип enum или contain ..

Я надеюсь, что вы понимаете мой вопрос, и надеюсь, что вы можете помочь мне сосредоточиться на этом.

Ответы [ 2 ]

3 голосов
/ 04 июня 2010

Ruby не является строго типизированным, как C #. Но вы можете использовать проверки, чтобы проверить, что в статусе:

def MyClass < ActiveRecord::Base
    ACTIVE_STATUS = "active"
    INACTIVE_STATUS = "inactive"
    PENDING_STATUS = "pending"
    NUMERICAL_STATUS = 500 # this is weird but okay

    ALL_STATUSES = [ACTIVE_STATUS, INACTIVE_STATUS, PENDING_STATUS, NUMERICAL_STATUS]

    validates_inclusion_of :status, :in => ALL_STATUSES

end
0 голосов
/ 04 июня 2010

Обычно, если это просто перечисление в C ++ или C #, я бы перевел это следующим образом:

class VoteStatus
  ACTIVE_STATUS=0
  INACTIVE_STATUS=1
  PENDING_STATUS=2
end

так что вы храните целое число в вашей базе данных, и значение ясно в вашем коде.

Однако я бы предложил использовать для этого простую таблицу доменов. Таким образом, вы определяете и можете поддерживать возможные статусы в вашей базе данных, вы определяете идентификатор, имя и описание, и внезапно ваши статусы становятся самодокументированными, а имена и описания могут быть показаны пользователю (надеясь, что вам не нужны переводы). :.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...