Preventing model from saving

I have a scenario where I have to prevent objects from saving to the
database if they have a certain value and I want to come up with the
optimal way to achieve that.

In my scenario, upon form submit, I will send 20 rows to the update
action in the controller. However, I want to discard the 95% of them
that have a particular attribute value to save database rows.

I'm not sure I want to traverse the hashes:
params[:parentobject][:childobject][:grandchildobject][10][attributes][....
within the update action and loop through the objects and delete them
if they have a particular value.

doing a before_save method within the model being destroyed:
self.destroy if self.status = "something"
doesn't seem to be a good option.

Any other ideas?

You could use a validation. That would be the normal method. Then
you can just call save and only the valid ones will actually be saved.

Colin

Colin Law wrote in post #990706:

accepts_nested_attributes_for takes :reject_if => :method_name
(or Proc.new{|obj| obj.some_value == i})

Garrett Lancaster

compose-unknown-contact.jpg

I am not sure you made it entirely clear that you were using
accepts_nested_attributes_for, but perhaps in retrospect it was fairly
obvious. In which case you are right and Garrett's suggestions may be
the way to go.

Colin

Thank you all. The winning line of code is, for future readers'
benefit:

accepts_nested_attributes_for :item_statuses, :reject_if =>
Proc.new{|obj| obj['status'] == 'i'}