EnumHelp

Help ActiveRecord::Enum feature to work fine with I18n and simple_form.

Make Enum field correctly generate select field.

As you know in Rails 4.1.0 , ActiveRecord supported Enum method. But it doesn't work fine with I18n and simple_form.

This gem can help you work fine with Enum feather, I18n and simple_form

Installation

Add this line to your application's Gemfile:

gem 'enum_help'

And then execute:

$ bundle

Or install it yourself as:

$ gem install enum_help

Usage

required Rails 4.1.x

In model file:

class Order < ActiveRecord::Base
  enum status: { "nopayment" => 0, "finished" => 1, "failed" => 2, "destroyed" => 3 }

  def self.restricted_statuses
    statuses.except :failed, :destroyed
  end
end

You can call:

order = Order.first
order.update_attribute :status, 0
order.status
# > nopayment
order.status_i18n # if you have an i18n file defined as following, it will return "未支付".
# > 未支付

In _form.html.erb using simple form:

<%= f.input :status %>

This will generate select field with translations automaticlly.

And if you want to generate select except some values, then you can pass a collection option.

<%= f.input :status Order.restricted_statuses %>

Other arguments for simple_form are supported perfectly.

e.g.

<%= f.input :status, prompt: 'Please select a stauts' %>

<%= f.input :status, as: :string %>

I18n local file example:

# config/locals/model/order.zh-cn.yml
zh-cn:
  enums:
    order:
      status:
        finished: 完成
        nopayment: 未支付
        failed: 失败
        destroyed: 已删除

Thanks

Contributing

  1. Fork it ( http://github.com/zmbacker/enum_help/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request