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?

On 3 April 2011 19:36, John W. [email protected] wrote:

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.

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

On 3 April 2011 19:36, John W. [email protected] wrote:

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.

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

Validation failure would make all 20 records and the parent object save
fail in totality. I’m trying to have everything save minus the nested
objects with a certain field value of “i”. All other nested objects
with other values save fine.

On 4 April 2011 17:57, John W. [email protected] wrote:

Validation failure would make all 20 records and the parent object save
fail in totality. I’m trying to have everything save minus the nested
objects with a certain field value of “i”. All other nested objects
with other values save fine.

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’}

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

Garrett L.