Delocalize (or localize) attributes on Rails with I18n::Alchemy
You need to "convert" your parameters when handling localized fields like monetary and distance fields? Don't worry, I have a simple tip for you.
Thanks @carlosantoniodasilva !!
You can use this for numbers (float...decimal...) and date.
First, you need to use a gem called 'i18n_alchemy', so add this to your gemfile:
If you're using rails 3.x, put this line:
gem 'i18n_alchemy'
If you're using rails4, put this line:
gem 'i18n_alchemy', github: 'mpatrick/i18n_alchemy', branch: 'rails4'
Now, you have to include this on your model that you have attributes to localize.
class TributaryParam < ActiveRecord::Base
include I18n::Alchemy
localize :value, using: :number
localize :date, using: :date
end
So, now you can see on CREATE and UPDATE that you receive parameters and "delocalize" it, and in your EDIT you receive this localized on your view.
If you're using Rails 3.x, do this
class TributaryParamController < InheritedResources::Base
def create
x = TributaryParam.new
x.localized.assign_attributes(params[:tributary_param])
x.save!
end
def update
resource.localized.update_attributes(params[:tributary_param])
redirect_to your_path
end
def edit
@localized = resource.localized
end
end
If you're using Rails 4.x, do this
class TributaryParamController < InheritedResources::Base
def create
x = TributaryParam.new
x.localized.assign_attributes(permitted_params[:tributary_param])
x.save!
end
def update
resource.localized.update_attributes(permitted_params[:tributary_param])
redirect_to your_path
end
def edit
@localized = resource.localized
end
private
def permitted_params
params.permit(tributary_param: [:value])
end
end
NOTE_1:
I'm using inherited_resources, so if you don't, the method RESOURCE won't work and you'll to substitute it for Object.find(:id) and attribute this to a instance variable.
NOTE_2:
In rails 4.x the model methods like attraccessible are removed, and because this you need to use permittedparams, read THIS about strong_parameters.
Written by Patrick Müller
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Ruby
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#