validates :user, presence: true,  uniqueness:  true

Much easier than what you are trying to do.

Note that this will work in 99.999% of the time, 0.001% of the time you will 
get duplicate records in your database because of race conditions

Alternatively, if your user really is going to have only 1 address, then why 
isn't the address_id field inside of the User model? (You would then have your 
User belong_to :address). Seems like a more appropriate model for what you are 
trying to do. 


-Jason



On Oct 8, 2014, at 9:20 AM, GeorgeFromTheBank <[email protected]> wrote:

> Hello,
> 
> I want to restrict my users having more than one address. 
> 
> Here are the definitions from my classes :
> 
> class User < ActiveRecord::Base
>   has_one :address, dependent: :destroy
> end
> class Address < ActiveRecord::Base
>   belongs_to :user
>   validates :user, presence: true
>   validate :user_association
> 
>   def user_association
>     unless Address.where(user_id: user.id).count == 0
>       errors.add(:user_id, 'Only one address per user')
>     end
>   end
> end
> 
> I'm creating my address from user model, like this :
> def create_address_relation
>     a = Address.create(address_type: @type.to_s, user_id: id)
>     self.address = a
> end
> 
> However when I'm able to create two address objects for same user. (I'm using 
> paranoia gem for soft deleting objects, not sure if that is relevant)
> 
> Any suggestion how to make validations work? except unique index on the db
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rubyonrails-talk/f9593b29-3a3a-44e2-976c-3016c9d4fbea%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

----

Jason Fleetwood-Boldt
[email protected]
http://www.jasonfleetwoodboldt.com/writing

All material © Jason Fleetwood-Boldt 2014. Public conversations may be turned 
into blog posts (original poster information will be made anonymous). Email 
[email protected] with questions/concerns about this.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/84D5CD9A-4FCA-43DE-ACD7-9CAD02DE02F9%40datatravels.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to