Я создал 3 модели, User, City, UserCity.
Класс пользователя:
class User < ActiveRecord::Base
has_many :user_cities, :dependent => :destroy, :uniq => true
has_many :cities, :through => :user_cities
end
Класс города:
class City < ActiveRecord::Base
has_many :user_cities, :dependent => :destroy, :uniq => true
has_many :users, :through => :user_cities
end
Класс UserCity:
class UserCity < ActiveRecord::Base
belongs_to :user
belongs_to :city
end
И тогда я попытался
u = User.new()
c = City.new()
u.cities << c
c.users << u
p UserCity.all.size # => 2
Таблица user_cities содержала дубликаты.Итак, я закодировал
класс UserCity:
class UserCity < ActiveRecord::Base
validates :user_id, :uniqueness => {:scope => :city_id}
belongs_to :user
belongs_to :city
end
и запустил тот же код ruby, что и выше.Но это не удалось после c.users << u
, потому что я запретил дублирование.
Как я могу заставить u.cities
иметь c
и c.users
иметь u
без дублирования данных в таблице соединения?
Добавлено:
Итак, если я выберу только c.users << u
, могу ли я сделать это только для cities
?
cities = Array.new()
UserCity.where(:user_id => u.id).each do |uc|
cities << City.find(uc.city_id)
end