我有以下设置,我想确保我的品牌型号中的所有品牌都属于我的用户模型中的所有用户。我还想确保一旦创建了一个品牌,并且它属于所有用户,它也将属于未来注册的用户。
品牌模型
has_many :brand_users
has_many :users, :through => :brand_users
after_create :associate_with_all_users
def associate_with_all_users
User.find(:all).each do |user|
users << user
end
save
end
BrandUser模型
belongs_to :brand
belongs_to :user
用户模型
has_many :brand_users
has_many :brands, :through => :brand_users
当我在控制台中尝试以下操作时,它显示当前最后一个品牌实例仅属于单个用户,而不是两者(目前有2个用户存在)。
>> User.all.count
=> 2
>>BrandUser.last.user_id
=>1 #Should not belong to just the one user but both
答案 0 :(得分:2)
您的代码应该有效,如果您尝试Brand.first.users
,您是否得到了所有用户?
无论哪种方式,如果每个品牌都与每个用户相关联,反之亦然,为什么不尝试这样的事情:
def User > ActiveRecord::Base
def brands
Brand.all
end
end
def Brand > ActiveRecord::Base
def users
User.all
end
end
答案 1 :(得分:2)
您的模型看起来正确,您可以将您的品牌关联通话清理为:
def associate_with_all_users
self.users = User.all
# save I don't believe this is necessary anymore if you assign the association
end
至于确保所有新创建的用户都能获得所有品牌,您可以
class User
after_create :associate_with_brands
def associate_with_brands
self.brands = Brand.all
end
end
或者查看http://api.rubyonrails.org/classes/ActiveRecord/Observer.html