Enum, ActiveModel and I18n

761 views
Skip to first unread message

Sadjow Leão

unread,
Apr 14, 2014, 3:25:48 PM4/14/14
to rubyonra...@googlegroups.com
Hi folks,

I'm thinking about a Pull Request for Rails. But, I want to validate with you.

Why not put Enum into ActiveModel? We may need some enumeration into another model without ActiveRecord, a example: something like a mail object form with a enumeration for subject... and other situations.

And a second Pull Request is:

i18n for enum values. We need that.

What do you think about?

Thanks,

Rafael Mendonça França

unread,
Apr 14, 2014, 4:29:50 PM4/14/14
to rubyonra...@googlegroups.com

Hi,

Could you explain a bit more about the use case you are thinking for enum feature on Active Model?

By what you described I believe you can reach with validates_inclusion_of and a hash. An example of the controller and view would help.

Also, could you also explain what is the use case for i18n for enum values?

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-co...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Sadjow Leão

unread,
Apr 14, 2014, 5:34:59 PM4/14/14
to rubyonra...@googlegroups.com
Hi Rafael,

I think that as ActiveModel holds the attributes, it can hold the enums. Enums are like attributes, but with a pre-defined collection of values( enum is a special kind of attribute). And not only ActiveRecord objects can have enumerations. I think that this is natural of a model and not only of a record of database.

With enum attribute in ActiveModel, we can take advantage of the same API of enums for create objects like Form Objects, ValueObjects(ActiveModel) and etc ..... With this, we can extend the use of enums`s API.

That way, we can have a conversion for the translations(humanization) of enumerations:

A example of a YML file with the enum values translations that we could access by  example a method `Employee.type.human`:

Inline image 1

A method called Employee.type.collection could return the collection with translated humanized values, that can be used by a select box in a form.

T.J. Schuck

unread,
Apr 14, 2014, 5:37:48 PM4/14/14
to rubyonra...@googlegroups.com
Why not put Enum into ActiveModel? We may need some enumeration into another model without ActiveRecord, a example: something like a mail object form with a enumeration for subject

If the object isn’t persisted to the DB, it doesn’t seem like you’d need to use AR::Enum — the primary benefit is that it maps the options to integers in the DB column.  For a non-persisted model, you can just use a regular attribute with an inclusion validation like Rafael mentioned.

By what you described I believe you can reach with validates_inclusion_of and a hash.

Note that AR::Enum doesn’t play nicely with `inclusion` validations — see https://github.com/rails/rails/issues/13971 — so this only applies to the provided workaround for a  non-persisted object.

Sadjow Leão

unread,
Apr 14, 2014, 8:53:09 PM4/14/14
to rubyonra...@googlegroups.com
Yeap, T.J.

But, actually enums are not only for persisted AR objects, we can find enumerations where we can have a pre-defined list of values.

A validation doesn't matter here. I'need the same enum API for a model.

Without this behaviour in ActiveModel, we will end up making a similar behaviour of enums to accomplish this need.


Sadjow Medeiros Leão
Software Engineer

Rafael Mendonça França

unread,
Apr 14, 2014, 9:37:32 PM4/14/14
to rubyonra...@googlegroups.com
Could you please provide a concrete example of what you need from enum feature? How would you like to use?
Reply all
Reply to author
Forward
0 new messages