Greetings Jacon and Ed, As Rafael already mentioned, there is an ongoing process to support Form Models/Objects. There is a Rails plugin(https://github.com/rails/activeform) in early stage. Me and Carlos worked on it during the GSoC period.
We would appreciate it if you had a look at it and give us any feedback on how it supports your current needs. We would benefit a lot if we could find some real-world needs. Looking forward to hearing from you, Peter Markou Τη Πέμπτη, 11 Σεπτεμβρίου 2014 5:35:20 μ.μ. UTC+3, ο χρήστης Jacobo Blasco έγραψε: > > Hello, > > We posted this message in GitHub a few weeks ago ( > https://github.com/rails/rails/issues/16516), and Rafael Franca gently > pointed us at this mailing list. He suggested that we open up the > discussion to see if this feature request would be accepted or not. All > suggestions are welcomed - especially regarding the implementation. > > We have various :has_many associations in our application, but we want to > move away from *accepts_nested_attributes* due to an increasingly large > and complex domain and workflow model. We want more control over how model > attributes get updated and are willing to forfeit the convenience of > accepts_nested_attributes. Unfortunately, the *FormBuilder#fields_for* > method doesn't play well with this design decision. As per the > documentation, it requires the parent model to respond to > *"#{association}_attributes="*. This seems unnecessarily restrictive. > > In the example provided by the documentation ( > http://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-fields_for > ): > > class Person > def projects > [@project1, @project2] > end > > def projects_attributes=(attributes) > # Process the attributes hash > end > end > > It would be possible to just inspect *projects* to realize that it is a > collection and treat it the same as nested attributes. The following > snippet contains a one line change that appears to accomplish this (see > SUGGESTED CODE, extracted from *lib/action_view/helpers/form_helper.rb*): > > def fields_for(record_name, record_object = nil, fields_options = {}, &block) > fields_options, record_object = record_object, nil if > record_object.is_a?(Hash) && record_object.extractable_options? > fields_options[:builder] ||= options[:builder] > fields_options[:namespace] = options[:namespace] > fields_options[:parent_builder] = self > case record_name > when String, Symbol > # ORIGINAL CODE > # if nested_attributes_association?(record_name) > # END OF ORIGINAL CODE > > # SUGGESTED CODE > if nested_attributes_association?(record_name) *|| > record_object.respond_to?(:to_ary)* > # END OF SUGGESTED CODE > return fields_for_with_nested_attributes(record_name, record_object, > fields_options, block) > end > else > record_object = record_name.is_a?(Array) ? record_name.last : record_name > record_name = model_name_from_record_or_class(record_object).param_key > end > #... > > The suggested modification would yield a more flexible solution without > coupling so tightly to nested attributes. What do you think of the idea > and of this specific solution? Rafael noted that this could break existing > applications, but we fail to see under what scenarios that would happen. > Thoughts? > > Thank You. > > Jacobo & Ed > Case Commons > -- 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.