[英]Ruby on Rails - Accessing data in :has_many => :through association
我正在嘗試掌握Rails中的這種關聯
我有以下三種模型:
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 = 'testuser@testdomain.co.uk'
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訪問網上論壇?
如何測試用戶是否屬於默認組“ Active Users”?
任何建議將不勝感激。
謝謝
您可能使默認組過於復雜。 這是我想出的。 為了簡單起見,用戶和組在我的示例中僅具有名稱屬性。
# app/models/user.rb
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
before_create :add_default_group
protected
def add_default_group
self.groups << Group.find_by_name('Active Users')
end
end
# app/models/group.rb
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
end
# app/models/membership.rb
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
您只需要一個回調, before_create. And now for the test:
before_create. And now for the test:
# test/unit/user_test.rb
require 'test_helper'
class UserTest < ActiveSupport::TestCase
def test_user_gets_default_group
group = Group.create(:name => 'Active Users')
user = User.new(:name => 'Test')
assert user.save
assert_equal [group], user.groups
end
end
該測試不僅檢查用戶是否有一些組,還檢查您期望的確切組,這是一個更嚴格的檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.