我应该如何让我的模型实例属于我的用户模型中的所有用户?

时间:2011-08-29 12:47:32

标签: ruby-on-rails ruby-on-rails-3 models has-many-through

我有以下设置,我想确保我的品牌型号中的所有品牌都属于我的用户模型中的所有用户。我还想确保一旦创建了一个品牌,并且它属于所有用户,它也将属于未来注册的用户。

品牌模型

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

2 个答案:

答案 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