Re: [Rails] Make a column data unique for each user_id

16 views
Skip to first unread message

Hassan Schroeder

unread,
May 19, 2013, 2:31:28 PM5/19/13
to rubyonra...@googlegroups.com
On Sat, May 18, 2013 at 8:14 AM, Denny Mueller <macd...@googlemail.com> wrote:
> This is my setup. I have a table user where all user with password and so on
> are set. The customer table has some customer related data. The user_id is
> the foreign key to relate the customers to the user.
>
> On of the column in the customer table is the customernumber. These numbers
> has to be uniq for each user_id.

Is this a legacy database you're trying to use with Rails? It doesn't
appear to follow Rails conventions.

In this example, is "customer" a unique auto-generated identifier? If
so, why do you need "customernumber" to also be unique? If not,
what is it?

> customer | customernumber | user_id
> 1 0001 1
> 2 0002 1
> 3 0001 2
> 4 0001 3
> 5 0002 3

--
Hassan Schroeder ------------------------ hassan.s...@gmail.com
http://about.me/hassanschroeder
twitter: @hassan

Matt Jones

unread,
May 20, 2013, 12:56:13 PM5/20/13
to rubyonra...@googlegroups.com


On Saturday, 18 May 2013 11:14:35 UTC-4, Denny Mueller wrote:
This is my setup. I have a table user where all user with password and so on are set. The customer table has some customer related data. The user_id is the foreign key to relate the customers to the user.

On of the column in the customer table is the customernumber. These numbers has to be uniq for each user_id. 


class Customers
belongs_to :user
end

class Users
has_many :customers
end

For example.

customer | customernumber | user_id 
1              0001                    1
2              0002                    1
3              0001                    2
4              0001                    3
5              0002                    3

How can i approach this? Any hints what I have to look for?

validates_uniqueness_of has a 'scope' option that will do exactly what you're describing:

class Customer < ActiveRecord::Base
  belongs_to :user
  validates_uniqueness_of :customernumber, :scope => :user_id
end

Depending on what you're intending to use the customer number for, you may also want to take a look at something like acts_as_list.

--Matt Jones 

Robert Walker

unread,
May 21, 2013, 9:03:47 PM5/21/13
to rubyonra...@googlegroups.com
Matt Jones wrote in post #1109607:
> On Saturday, 18 May 2013 11:14:35 UTC-4, Denny Mueller wrote:
>>> belongs_to :user
>> 1 0001 1
>> 2 0002 1
>> 3 0001 2
>> 4 0001 3
>> 5 0002 3
>>
>>
>> How can i approach this? Any hints what I have to look for?
>>
>
> validates_uniqueness_of has a 'scope' option that will do exactly what
> you're describing:

Also note that any use of validates_uniqueness_of should also be backed
by unique constraints in the database to prevent race conditions from
causing duplicates.

For more details on race conditions related to uniqueness validations
read the section under "Concurrency and integrity" here:

http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_uniqueness_of

--
Posted via http://www.ruby-forum.com/.
Reply all
Reply to author
Forward
0 new messages