On Feb 14, 2:52 pm, Josh Bassett <[email protected]> wrote: > I'm pretty sure I did. > > In the nested_attributes.rb code I see the method responsible: > > def nested_attributes_setter(reflection, attributes) > return if (b = reflection[:nested_attributes][:reject_if]) && > b.call(attributes) > modified! > klass = reflection.associated_class > if pk = attributes.delete(klass.primary_key) || > attributes.delete(klass.primary_key.to_s) > if klass.db.send(:typecast_value_boolean, attributes[:_delete] || > attributes['_delete']) && reflection[:nested_attributes][:destroy] > nested_attributes_remove(reflection, pk, :destroy=>true) > elsif klass.db.send(:typecast_value_boolean, attributes[:_remove] || > attributes['_remove']) && reflection[:nested_attributes][:remove] > nested_attributes_remove(reflection, pk) > else > nested_attributes_update(reflection, pk, attributes) > end > else > nested_attributes_create(reflection, attributes) > end > end > > It appears that the block within the conditional: > > if pk = attributes.delete(klass.primary_key) || > attributes.delete(klass.primary_key.to_s) > > will only perform a remove or update operation.
Your analysis is correct. I'm not sure this is a good candidate for supporting such code by default, though. Maybe there should be an easy to override method where you can pass in the reflection and attributes and it determines which method to run (create/update/remove/ delete)? That would require some refactoring, but would allow you to easily get the behavior you want by overriding a simple method. Does that sound reasonable to you? Jeremy I'll accept a patch with specs that allows you to provide a option to the nested_attributes_method (:pk_create ?) where if you provide a _create key in the attributes, it will create an associated object instead of updating. That doesn't appear to be exactly what you want, though. You appear to want the plugin to automatically choose whether to create or update based on the current content in the database. -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sequel-talk?hl=en.
