을 통해 레일에 루비 - 데이터 액세스 : => 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를 사용하면 안됩니다. 나는 그룹을 통해 그룹에 액세스 할 수 있어야한다는 인상 아래에 있었습니까?
사용자가 '활성 사용자'라는 기본 그룹에 속하는지 어떻게 테스트 할 수 있습니까?
모든 조언을 주시면 감사하겠습니다.
감사합니다.
'before_save' 메소드를 보여줄 수 있습니까? 그리고 나는 여러분이 before_create'라고 생각합니다. 왜냐하면 before_save'가 매번 업데이트 될 때마다 호출되기 때문입니다. – Eimantas