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.