Глядя на документацию EnR ActiveRecord , я не согласен с тем, что иногда мне разрешают использовать символы, а иногда мне нужно использовать только строки.
Из документов вы можете делать запросы, используя символы:
Conversation.where(status: [:active, :archived])
Conversation.where.not(status: :active)
Но вы не можете сравнивать, используя символы:
conversation = Conversation.new(status: :active)
conversation.status # "active"
conversation.status == :active # false
И вы можете установить статус, используя символ, но его чтение вернет строку, поэтому вы всегда должны использовать строки для сравнения:
conversation.status = :active # :active
conversation.status # "active"
Моя точка зрения такова: я хотел использовать только символы, потому что производительность, и она кажется мне более идиоматичной. Если перечисления определены с использованием символов и могут быть запрошены с использованием символов, почему я должен (и должен помнить!) Использовать строки при сравнении чего-то вроде conversation.status == "active"
?
Моя идея переопределить геттер:
def status
super.try(:to_sym)
end
Таким образом, я всегда могу использовать символы. Любая разумная причина не делать этого?