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 Law wrote in post #990706:

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

Garrett Lancaster


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.


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

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