Personally, I think that''s a bad idea. Overriding the behavior of
save seems rather dangerous and confusing. The save method should
either return true or false (indicating validation or database errors
encountered during save). It should not attempt to return an instance
of some other object.
Instead you should allow the normal validation system to provide
feedback to the user that they are attempting to insert a duplicate
address.
I''m thinking something like:
Address < ActiveRecord::Base
belongs_to :user
validate_uniqueness_of :address, :scope =>
[ :user_id, :city, :state, :zip ]
validate_uniqueness_of :city, :scope =>
[ :user_id, :address, :state, :zip ]
validate_uniqueness_of :state, :scope =>
[ :user_id, :address, :city, :zip ]
validate_uniqueness_of :zip, :scope =>
[ :user_id, :address, :city, :state ]
end
Now in your controller/view you could then provide them a link or
possibly redirect to some view of the user showing the existing
address. But, this type of thing should not happen anywhere in the
model layer.
On Jun 5, 4:12 pm, Tyler MacDonald
<google....-oTuY4Vk9bUDG8MNy1oJpyw@public.gmane.org>
wrote:> Hey everybody,
>
> I''ve got a table that contains addresses. Addresses belong_to
users.
>
> When a new address is added, I would like to avoid duplicates. The model
> should check to see if it is exactly the same as an existing address, and
if
> it is, instead of saving the address and returning a new record, I would
> like it to load the old record.
>
> I''m thinking something like this:
>
> def save
> if old_record = this_is_a_duplicate_record
> this.id = old_record.id
> this.reload
> else
> super
> end
> end
>
> ... is this the way to do it? Or is there a better/safer method?
>
> Thanks,
> Tyler
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---