-
-
Save dmilisic/38fcd407044ace7514df to your computer and use it in GitHub Desktop.
module ActiveRecord | |
module RailsAdminEnum | |
def enum(definitions) | |
super | |
definitions.each do |name, values| | |
define_method("#{ name }_enum") { self.class.send(name.to_s.pluralize).to_a } | |
define_method("#{ name }=") do |value| | |
if value.kind_of?(String) and value.to_i.to_s == value | |
super value.to_i | |
else | |
super value | |
end | |
end | |
end | |
end | |
end | |
end | |
ActiveRecord::Base.send(:extend, ActiveRecord::RailsAdminEnum) |
Works like a charm. thanks a lot
Thank You - saved my day!
Don't forget to prevent filtering of the enum fields by
rails_admin do
configure :status do
searchable false
end
end
otherwise search/filter will throw errors
Note: to add localization (default attribute path translation) support, change getter method definition to
define_method("#{ name }_enum") {
self.class.send(name.to_s.pluralize).to_a.map do |k, v|
translated = I18n.t(k, scope: [:activerecord, :attributes, self.class.to_s.downcase, name.to_s.pluralize])
processed_key = translated.include?('translation missing') ? k : translated
[processed_key, v]
end
}
thanks @chris-roerig - filename updated
Thank you. @dmilisic Works like a charm
Please help me!. I have a model LocationMaster which consists of all locations. I want to display the locations as enum in rails admin. I want to store the id of the location selected by the user in location_master_id filed. I cant get it. Please help me!
Strange enough, my filtering does seem to work with enum fields. The only things I did were to add the patch file and add the lines of field :category
.
Thanks! worked like a charm
bit late on this but thanks so much - worked perfectly straight off the bat and saved me a lot of headache time..
thanks!
To make this work in Rails 5, I had to change:
self.class.send(name.to_s.pluralize).to_a
to
self.class.send(name.to_s.pluralize).keys.to_a
The documentation for supported formats is here:
Before adding this, the filter did not work. Now the filter works fine.
But, now my enum field in the form (rails_admin form) does not get populated with the stored value. It defaults to nil.
Update
It is fixed now. I tried the suggestion by @jefflab (right above my comment) and it works.
Also had the issue with form value not populated with stored value. (and fix from @jefflab broke the filtering for me)
I was able to fix it with adding mentioned initializer + :
configure :state, :enum do
def form_value
bindings[:object].state_before_type_cast
end
end
It should be noted that this must be loaded before config/initializers/rails_admin.rb, otherwise enum options will not work.