2
我試圖去抓住這種類型的關聯在Rails的Ruby on Rails的 - 在訪問數據:的has_many =>:通過關聯
我有以下三種模式:
User
has_many: 'memberships'
has_many: groups, :through => 'memberships'
Membership
belongs_to: 'user'
belongs_to 'group'
Group
has_many: 'memberships'
has_many: 'users', :through => 'memberships'
我有一個before_create方法,它將一個新用戶添加到默認用戶組。
user.rb
attr_accessor :group_ids
before_create :add_user_to_default_group
after_save :update_groups
def add_user_to_default_group
self.group_ids = [1]
end
#after_save callback to handle group_ids
def update_groups
unless group_ids.nil?
self.memberships.each do |m|
m.destroy unless group_ids.include?(m.group_id.to_s)
group_ids.delete(m.group_id.to_s)
end
group_ids.each do |g|
self.memberships.create(:group_id => g) unless g.blank?
end
reload
self.group_ids = nil
end
end
我想寫一個測試,以確保這是正確的發生。
user = User.new
user.username = 'testuser'
user.email = '[email protected]'
user.password = 'testpass'
user.password_confirmation = 'testpass'
assert user.save
assert user.errors.empty?
assert !user.memberships.empty?
測試通過,如果我使用user.memberships.empty,但不是如果我使用user.groups.empty ?.我的印象是,我應該可以通過.groups訪問這些組?
我如何測試用戶是否屬於名爲「活動用戶」的默認組?
任何意見將不勝感激。
謝謝
你能告訴我們'before_save'方法嗎?而且我認爲你每次更新都會調用'before_create',因爲'before_save'會被調用。 – Eimantas 2010-01-17 15:07:54