1

has_many : through와 연결된 사용자, 팀 및 팀 구성원이 있습니다.View/Controller for has_many : through Association

팀에서 사용자를 삭제하는 기능을 추가하려고합니다. 팀을 연관시키는 TeamMembership 모델을 파괴해야합니다. 다음과 같이

내 모델은 다음과 같습니다

# models/team.rb 
class Team < ActiveRecord::Base 
    has_many :team_memberships, :dependent => :destroy 
    has_many :members, :through => :team_memberships 
end 

# models/user.rb 
class User < ActiveRecord::Base 
    has_many :team_memberships 
    has_many :teams, :through => :team_memberships 
end 

# models/team_membership.rb 
class TeamMembership < ActiveRecord::Base 
    belongs_to :team 
    belongs_to :member, class_name: 'User', foreign_key: 'user_id' 
end 

뷰는 현재 다음과 같습니다 : I는 "사용자 제거"버튼의 구현을 마무리 도움을 찾고 있어요

- @team.members.each do |member| 
    .member 
    = link_to member.name, user_path(member) 
    = button_to "Remove User" 

. 나는 파괴해야 할 팀원을 어떻게 넘겨 줄지 잘 모르겠습니다. 사용자 컨트롤러에서

답변

3
resources :teams do 
    resources :users do 
     member do 
      delete :remove_from_team 
     end 
    end 
end 

:

def remove_from_team 
    @team = Team.find(params[:team_id]) #can do that in before_filter 
    user = User.find(params[:id]) 
    @team.members.delete user 
    redirect_to @team 
end 

뷰에서

= button_to "Remove user", remove_from_team_team_user_path(@team, member), :method => :delete 

은 또한 단지 가질 수

resources :team_memberships 

개 그리고 team_memberships 컨트롤러

= button_to "Remove user", team_membership_path(@team.team_memberships.where(:user_id => member.id).first), :method => :delete 

의 파괴 작용을하지만 사용자가 링크를 클릭하지 않을 경우에도 각 멤버의 team_membership을 얻기 위해 필요한 질의가있을 것입니다 ...

+0

감사합니다. 이미 team_memberships 컨트롤러가 있었기 때문에 두 번째 옵션을 사용했습니다. 유일한 것은 ActiveRecord :: Relation이 아닌 TeamMembership 자체를 전달하는 것입니다. 그래서 team_membership_path (@ team.team_memberships.where (user_id : member.id) .first – HeroicEric

+0

괜찮 았어, 맞아, '.first'; – Robin