ruby-on-rails - gema - rails i18n activerecord error messages
Rails I18n accept_nested_attributes_for y error_messages_for (2)
Tengo dos modelos
class SurveyResponse
has_many :answers, :class_name => SurveyResponseAnswer.name
accepts_nested_attributes_for :answers
end
class SurveyResponseAnswer
belongs_to :survey_response
validates_presence_of :answer_text
end
En mi formulario anidado, si la validación falla, aparece este error en la pantalla:
"respuestas texto de respuesta no puede estar en blanco"
He personalizado mis nombres de atributos con cierto éxito utilizando los carriles I18n. Aunque no se comporta exactamente como lo esperaría. El archivo yml a continuación no afecta cómo se imprime el nombre del atributo en error_messages_for
en:
activerecord:
models:
survey_response:
answers: "Response"
Pero si desde script / consola lo intento
SurveyResponse.human_attribute_name ("respuestas")
Obtengo el resultado esperado de "Respuesta".
Lo que me gustaría hacer es que el mensaje de error de validación diga:
"El texto de respuesta de respuesta no puede estar en blanco". ¿Alguna idea de lo que necesito arreglar?
A partir de Rails 3.2.0, el i18n yaml ha cambiado a
en:
activerecord:
attributes:
survey_response:
foo: "Foo"
survey_response/answers:
answer_text: "Response"
(Observe la barra diagonal). Esto también le permite definir un nombre de atributo en la colección en sí, por ejemplo
en:
activerecord:
attributes:
survey_response:
foo: "Foo"
answers: "Ripostes"
survey_response/answers:
answer_text: "Response"
Prueba esto:
en:
activerecord:
models:
survey_response:
answers:
answer_text: "Response"
Estoy usando Rails 3 y esto me funciona (mi archivo i18n es un poco diferente, usa "atributos" en lugar de modelos. No sé si esto funciona en 2.3)
en:
activerecord:
attributes:
survey_response:
answers:
answer_text: "Response"
Antes de eso, estaba intentando crear un atributo en el yml llamado "answers_answer_text" pero no estaba funcionando.
Espero que esto resuelva tu problema.