Rails 3 belongs to validation

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: :destroyendclass 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
endend

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 = aend

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

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:

belongs_to :user
I’m creating my address from user model, like this :
You received this message because you are subscribed to the Google G. “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.

Thanks for the reply Jason (I almost wrote Json :), I really appreciate
it.

validates :user, uniqueness: true

is simple way(When you specify association then it also check other
model
validation) also other way is add custom validation for check uniquness