I’m +1 as I’ve wanted this in the past. I think enum actually did support this
but it was never documented (e.g. private API).

But I remember something about others having objections to supporting
string columns. Perhaps Rafael or Sean?

> Den 20. jun. 2018 kl. 22.08 skrev Alberto Almagro <albertoalma...@gmail.com>:
> 
> Hello again Rails community!
> 
> first of all thanks for your time reading this. I apologize in case this 
> appeared before, I swear I have tried a lot of combinations in the search 
> above, found nothing.
> 
> Currently Enum 
> <http://api.rubyonrails.org/v5.2/classes/ActiveRecord/Enum.html> allows us to 
> map the values to integers in the database. The typical use case would be 
> something like:
> 
> class CreateOrders < ActiveRecord::Migration[5.2]
>   def change
>     create_table :orders do |t|
>       t.integer :status
>     end
>   end
> end
> 
> 
> class Order < ApplicationRecord
>   enum status: [:ok, :billing, :failed]
> end
> 
> 
> 
> This would map the following:
> Order.statuses[:ok]       # => 0
> Order.statuses[:billing]  # => 1
> Order.statuses[:failed]   # => 2
> 
> 
> The problem with integers is that they don't read well in the database. 
> Seeing status = 0 isn't meaningful, so at the end lots of teams, including 
> us, end having a string in the database and mapping enums with a hash.
> 
> 
> class CreateOrders < ActiveRecord::Migration[5.2]
>   def change
>     create_table :orders do |t|
>       t.string :status
>     end
>   end
> end
> 
> 
> class Order < ApplicationRecord
>   enum status: { ok: 'ok', billing: 'billing', failed: 'failed' }
> end
> 
> Writing this really feels to us like unnecessary boilerplate. I would like to 
> write a PR to allow having a string in the database and declaring the enum 
> with an array of symbols.
> 
> class CreateOrders < ActiveRecord::Migration[5.2]
>   def change
>     create_table :orders do |t|
>       t.string :status
>     end
>   end
> end
> 
> 
> class Order < ApplicationRecord
>   enum status: [:ok, :billing, :failed]
> end
> 
> I think this would feel much better, cleaner. Of course I will keep current 
> options and syntax. Do you like it?
> 
> -- 
> 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-core+unsubscr...@googlegroups.com 
> <mailto:rubyonrails-core+unsubscr...@googlegroups.com>.
> To post to this group, send email to rubyonrails-core@googlegroups.com 
> <mailto:rubyonrails-core@googlegroups.com>.
> Visit this group at https://groups.google.com/group/rubyonrails-core 
> <https://groups.google.com/group/rubyonrails-core>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

--
Kasper

-- 
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-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to