Delocalize (ou localize) atributos em Rails com I18n :: Alchemy

Você precisa “converter” seus parâmetros ao lidar com campos localizados, como campos monetários e de distância? Não se preocupe, tenho uma dica simples para você.

Obrigado @carlosantoniodasilva !!

Você pode usar isso para números (float … decimal …) e data.

Primeiro, você precisa usar uma gema chamada ‘i18n_alchemy’, então adicione-a ao seu gemfile:

Se você estiver usando rails 3.x, coloque esta linha:

gem 'i18n_alchemy'

Se você estiver usando rails4, coloque esta linha:

gem 'i18n_alchemy', github: 'mpatrick/i18n_alchemy', branch: 'rails4'

Agora, você tem que incluir isso em seu modelo que você tem atributos para localizar.

class TributaryParam < ActiveRecord::Base
include I18n
::Alchemy
localize
:value, using: :number
localize
:date, using: :date
end

Então, agora você pode ver em CREATE e UPDATE que você recebe parâmetros e “delocaliza”, e em seu EDIT você recebe isto localizado em sua view.

Se você estiver usando Rails 3.x, faça isso

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

Se você estiver usando Rails 4.x, faça isso

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

NOTA 1:

Estou usando inherited_resources, então se você não usar, o método RESOURCE não funcionará e você vai substituí-lo por Object.find (: id) e atribuir isso a uma variável de instância.

NOTA 2:

No rails 4.x, os métodos de modelo como o attr acessível são removidos e, por isso, você precisa usar parâmetros permitidos , leia ISTO sobre strong_parameters.