Got a working prototype using a monkey 
patch: https://gist.github.com/sobrinho/f634f52a4ab7d47588f5

But object.errors.full_messages is not working anymore, we may need to 
reimplement the full_messages method.

On Saturday, May 17, 2014 10:50:50 AM UTC-3, Gabriel Sobrinho wrote:
>
> The pull request I mentioned: https://github.com/rails/rails/pull/8638
>
> On Saturday, May 17, 2014 10:48:43 AM UTC-3, Gabriel Sobrinho wrote:
>>
>> Hello guys,
>>
>> We’re working in some applications where we need to customise the JSON 
>> errors output in a more robust way (the front-end have a lot of backbone 
>> stuff).
>>
>> When a active record object fails to create, rails render this response:
>>
>> {
>>   :"employments.company"=>["can't be blank"],
>>   :email=>["can't be blank"],
>>   :password=>["can't be blank"]
>> }
>>
>> The first problem happens if you have more than one employment, first of 
>> all you won’t know which one has the error message.
>>
>> There is a pull request open since Dec, 2012 proposing to improve this 
>> response to:
>>
>> {
>>   :"employments[0].company"=>["can't be blank"],
>>   :"employments[1].company"=>["can't be blank"],
>>   :email=>["can't be blank"],
>>   :password=>["can't be blank"]
>> }
>>
>> Which would allow us to at least know which child has the error.
>>
>> I would to propose a better response or at least an option to do that, to 
>> have this output:
>>
>> {
>>   :employments => {
>>     0 => { :company => ["can't be blank"] },
>>     1 => { :company => ["can't be blank"] }
>>   }
>>   :email=>["can't be blank"],
>>   :password=>["can't be blank"]
>> }
>>
>> In this last response the errors would be easily accessible for anything 
>> on front-end like Angular, Ember.js or Backbone.
>>
>> But it’s completely backwards incompatible and may break all applications 
>> that relies on the current output.
>>
>> I’m not sure about the current versioning scheme of rails but in long 
>> term (rails 5?) this output would be the best.
>>
>>
>> But until then, would be great to have something like specifying a custom 
>> object to mount the errors.
>>
>> I’m trying to follow where active record puts the nested validations on 
>> the errors object, seems like it put the nested errors using the dot 
>> notation and because of that we would to have to workaround it to “expand” 
>> the notation to create this last output I suggest and that’s not easy or 
>> even fast to compute.
>>
>>
>> Am I missing a way to do that or we really need to change something on 
>> active record to be able to do that? If so, where can I start?
>>
>> Cheers,
>>
>> Gabriel Sobrinho
>> gabrielsobrinho.com
>>  
>>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to