Hello,
I am having a little bit problem in deleting duplicate entry of my many to many tables.
In many to many fields delete method is deleting all the occurrence of collection. Say I have (demo example):
class user < ActiveRecord::Base
has_and_belongs_to_many :cars
end
class car < ActiveRecord::Base
has_and_belongs_to_many :users
end
users and cars are many to many relationship, I have defined my users_cars table. Now user can have repetitive car entry as relation. For example:
Car: A,B,C User: U1,U2,U3
U1=[A,B,C,A,A,A,B]
Which can be implemented using many to many relationship, the way I have implemented. BUT, at the time when I want to delete one of the car entries of user the problem occurs.
Users.cars.delete(car) #deletes all occurrence of car
Users.cars.delete_at(User.cars.find_index(video_card)) #delete_at does not exist
Don’t know what your skill level is, but I would suggest checking out RailsCasts, #47 Two Many-to-Many: #47 Two Many-to-Many - RailsCasts
Your join table could be called CarOwners, as a point relevant to the RailsCast… Check it out… The general idea is that it is maybe better if you use :has_many :through…
@colin, certainly I can have a same model car twice whatever, it was just a made up scenario.
@Elizabeth, railscast helped. I did it with has_many :through.
If it is the model of car (not an actual car) then you should call the
model CarModel or similar to avoid confusion. In that case I agree with
Elizabeth, use has_many through. Also you might like to consider having a
counter in the join table rather than multiple joins, or perhaps that is
what you have done already.
@colin, certainly I can have a same model car twice whatever, it was
just a made up scenario.
If it is the model of car (not an actual car) then you should call the model
CarModel or similar to avoid confusion. In that case I agree with
Elizabeth, use has_many through. Also you might like to consider having a
counter in the join table rather than multiple joins, or perhaps that is
what you have done already.
Or possibly even better
User has_many cars
CarModel has_many cars
So the join model means something in the real world.