Problema con formularios "nesteados" e i18n al mostrar los errores


#1

Saludos comunidad.

Estamos trabajando sobre un proyecto con Rails 2.3.2 y hemos tenido que
usar
nested forms en el registro de usuarios.

Para ello manejamos dos modelos User y Company (User has_one :company y
Company belongs_to :user)

En el modelo User tenemos:


has_one :company
accepts_nested_attributes_for :company

En el controlador de usuarios tenemos:


def new
@user = User.new
end

def create
@user = User.new(params[:user])
if @user.save_without_session_maintenance
session[:user_id] = @user.id
redirect_to thanks_user_url
else
load_countries
render :new
end
end

En el form de new de users llamamos a los atributos de company de la
siguiente manera (usamos HAML):

  • form_for setup_user(@user), :url => user_path do |f|
  • form.fields_for :company do |company_form|
    %p
    = company_form.label :company_type, ('Tipo de empresa: ')
    == #{company_form.radio_button :company_type, ‘1’} #{
    (‘Empresa
    constituida’)}
    == #{company_form.radio_button :company_type, ‘2’} #{_(‘Persona
    particular’)}
    %p
    = company_form.label :name, _('Nombre de la empresa: ')
    = company_form.text_field :name
    %small (Requerido para empresa constituida)

En config/locales/es.yml tenemos lo siguiente


activerecord:
attributes:
user:
country_id: País
user_type: Tipo de usuario
first_name: Nombres
last_name: Apellidos
email: Correo electrónico
phone: Teléfono
password: Contraseña
terms: Términos del servicio
company:
name: Nombre de empresa
company_type: Tipo de empresa

Todo con el registro funciona ok, pero al momento de mostrar los errores
del
formulario, la de los campos de Company se muestran de la siguiente
manera:

  • Contraseña es un campo requerido
  • Contraseña no coincide con la confirmación
  • Company company type es un campo requerido <--------- Nótese el
    Company company type (debería mostrar Tipo de empresa es un campo
    requerido)
  • Correo electrónico es un campo requerido

Es decir, no se aplican las traducciones. Alguna solución u observación
de
su parte?

Gracias de antemano.


#2

Hola,

Creo que te funcionaria si repites la clave company_type dentro de user,
es
decir:

activerecord:
attributes:
user:
country_id: País
user_type: Tipo de usuario
first_name: Nombres
last_name: Apellidos
email: Correo electrónico
phone: Teléfono
password: Contraseña
terms: Términos del servicio
company_type: Tipo de empresa
company:
name: Nombre de empresa
company_type: Tipo de empresa

Mirando un poco por encima el codigo de rails del error_messages_for
parece
que solo trabaja con las traducciones del objeto actual y no con sus
relaciones. Vaya, solo carga la llave del hash :user

Espero que te funcione,

Saludos

2009/4/21 William Wong G. removed_email_address@domain.invalid


#3

Existe un parche para solucionar el error:

https://rails.lighthouseapp.com/projects/8994/tickets/2210-validation-on-associations-cant-process-i18n-aware-error-message

para aplicar el parche dirigirse donde se encuentra rails(en este caso
yo le
tengo en vendor):

cd /path/al/proyecto/vendor/rails
git am associated_error_message_with_tests.diff

Saludos.


#4

Gracias por los consejos

El 21 de abril de 2009 15:07, Ruben. D. removed_email_address@domain.invalid
escribió: