Checking if an association already exists between two records


#1

Hey,

I’m creating an app which has two models - bands and users. A
relationship between users and bands in many to many.

However, when I’m adding an existing to user to a band (ie. updating
the bands_users table) how can i check if the relationship between the
user and the band already exists? For example, if a user with ID of 3
was already a member of a band with ID 5, and then somebody tried to
make this connection again - I want to output an error message. Is
there some special validation I can place in a bands_users.rb that
validated the uniqueness of the entire record?

Thanks,
-ger


#2

You can use the scopt attribute of validates_uniqueness_of
But this would require, that the intermediate table between
users/bands has it’s own model

in this model (BandsUsers)
validates_uniqueness_of :user_id, :scope => band_id


#3

On Mon, Dec 1, 2008 at 11:07 AM, Gearóid O’Ceallaigh
removed_email_address@domain.invalid wrote:

make this connection again - I want to output an error message. Is
there some special validation I can place in a bands_users.rb that
validated the uniqueness of the entire record?

There is a :uniq option that will ignore duplicates:

class Band < ActiveRecord::Base
has_and_belongs_to_many :users, :uniq => true
end

This won’t raise an error, but it will prevent duplicate associations.
Hope that Helps

Brandon


Training by Collective Idea: Ruby on Rails training in a vacation
setting
http://training.collectiveidea.com — San Antonio, TX — Jan 20-23


#4

I guess you have your reasons but why not ignore the fact that the
relationship already existed? Does it really matter to let the user
know?

Pepe