Я использую перечисление в моей модели определяется как например:Рубин на Rails получить следующее перечисление от значения перечисления текущей модели
enum role: [:member, :content_creator, :moderator, :admin]
Я хотел простой способ получить следующую роль от текущей роли пользователя, так что я пришел с этим:
def self.next_role(user)
begin
User.roles.drop(User.roles[user.role] + 1).to_enum.next
rescue StopIteration
nil
end
end
по мнению, я бы, вероятно, добавить на этот следующий метод цепи: [...].first.humanize.titleize
.
Я только немного обеспокоен моим решением здесь, но в основном хотел узнать, был ли улучшенный (читай: более встроенный) способ получить то, что мне нужно? Я знаю, что есть только четыре перечисления, и я признаю, что начал свою реализацию с if ... elsif ... etc.
. Другими словами, я считаю себя более опытным в Rails, чем с Ruby. Может кто-то уточнить, как это сделать?
ли это ручная упаковка? Что такое «next» для ': admin'? – tadman
Стрелять. Отличный вопрос. Что вы думаете о «ноль» в качестве кандидата? Я хотел бы, чтобы этот метод сообщил, что после ': admin' ничего не происходит. –
Здесь вы определяете нестандартное поведение, поэтому вам нужно будет создать правила. Я просто говорю, что вам нужно подумать о таких ситуациях, чтобы быть уверенным, что он работает последовательно и по значимым причинам. – tadman