Rails HABTM Scoping для текущего субдомена - PullRequest
0 голосов
/ 21 апреля 2010

У меня есть следующие ассоциации:

class User < ActiveRecord::Base
  has_and_belongs_to_many :brands, :join_table => 'brands_users'
  has_and_belongs_to_many :companies, :join_table => 'companies_users'
end

class Brand < ActiveRecord::Base
  belongs_to                :company
  has_and_belongs_to_many   :users, :join_table => 'brands_users'
end

class Company < ActiveRecord::Base
  has_and_belongs_to_many   :users, :join_table => 'companies_users'
  has_many :brands, :order => :name
end

При редактировании пользователя я использую флажок списка брендов.Чтобы я мог назначить пользователям «доступ» к брендам, отображаемые бренды - это только бренды, принадлежащие текущей компании (определяется поддоменом [используя subdomain_fu]).

Проблема, с которой я сталкиваюсь, заключается в том, что при использовании функциональности HABTM по умолчанию и списка флажков при сохранении Rails удаляет ВСЕ пользовательские-> брендовые ассоциации, а затем повторно добавляет только те, которые я только что отправил...

Как определить, чтобы удалить только ассоциации брендов, принадлежащих текущей компании, определенных в поддомене?

1 Ответ

0 голосов
/ 23 апреля 2010

Вот что я сделал ... В итоге я поместил его в контроллер и вручную добавил ВСЕ внешние значения перед сохранением пользователя.

# if admin clears all brand checkboxes the browser will ignore this change,
# so we will provide an empty array if this is the case, to make sure that
# the brands are removed
params[:user][:brand_ids] ||= []

@user = User.find(params[:id])

# collect brands for this user that are not part of this form to ensure they 
# arent removed by the rails habtm functionality
other_brands = @user.brands(:conditions => ['id NOT IN (?)', @company.brands])
other_brands.each do |ob|
  params[:user][:brand_ids] << ob.id
end

# reload the user object with the brands selected on this form, as well as 
# all their brands from other companies
@user.reload(params)

Если у кого-то есть идея получше, я все равно хотел бы ее услышать, поскольку не знаю, является ли это лучшим вариантом здесь ..

...