I'm positive for this enhancement. The type information is already retained
in Rails 5 but having real object could be real handy.

On Mon, Feb 29, 2016 at 12:47 PM Evan Prothro <[email protected]>
wrote:

> I love the concept and usability of an ActiveModel::Errors paradigm.
> However, I and others often find it frustrating to work with the
> implementation.
>
>
> I'd love to see a proper ActiveModel::Error object, where the errors
> attribute of a model including ActiveModel::Errors was an Enumerator of
> these objects.
>
>
> There are various implied benefits and added flexibility that could be
> introduced in a backwards compatible way later, and immedate benefits.
> Would love to know what y'all think about this. Happy to implement if
> desired.
>
>
> <https://gist.github.com/eprothro/5ea12fd2b0527baf0090#immediate-benefits>Immediate
> Benefits
>
>
> <https://gist.github.com/eprothro/5ea12fd2b0527baf0090#the-error-type-could-be-retained>The
> error type could be retained
>
> APIs we build prefer to return Error objects to clients with the
> following schema:
>
> {
>   attribute:  "The model attribute to which the error applies. If blank, the 
> error applies generically to the base model.",
>   type:       "The type of error encountered with the model attribute or 
> model."
>   messsage:   "An internationalized message that can be displayed to a user.",
> }
>
> In particular, the type attribute allows clients to couple any logic they
> need on the error attribute and type, not themessage, which should be
> able to change with business/product needs.
>
> With a proper ActiveModel::Error object, this is easily done. With the
> current enumerable design, this is not a clean extension to make
> <https://gist.github.com/eprothro/d58d143729987c6c8834>.
>
>
> <https://gist.github.com/eprothro/5ea12fd2b0527baf0090#the-error-message-can-be-lazily-looked-up>The
> error message can be lazily looked up
>
> Currently, the message interpolation is looked up when the error is added
> to the model. This isn't necessarry, and is easily lazily evaluated when a
> derived attribute on an Error object.
>
>
>
> <https://gist.github.com/eprothro/5ea12fd2b0527baf0090#other-enhancements-easily-enabled>Other
> Enhancements easily enabled
>
>
> <https://gist.github.com/eprothro/5ea12fd2b0527baf0090#accessing-the-attribute-value-more-cleanly>Accessing
> the attribute value more cleanly
>
> error = model.errors.first
> error.attribute
> => :username
> error.attribute_value
> => 'eprothro'
>
>
>
> <https://gist.github.com/eprothro/5ea12fd2b0527baf0090#easier-custom-interpolation-parameters>Easier
> custom interpolation parameters
>
> # en.yml
> errors:
>       models:
>         user:
>           attributes:
>             username:
>               taken: "%{value} has already been taken."
>
> --
> 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 [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to