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.
