1

我有用戶,團隊和TeamMembership,它們與has_many:through關聯。視圖/控制器銷燬has_many:通過關聯

我想添加從團隊中刪除用戶的能力,這需要銷燬與之相關聯的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 

的看法目前看起來是這樣的:

- @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控制器,所以我選擇了第二種選擇。 唯一的是確保你通過TeamMembership本身而不是ActiveRecord :: Relation。所以我使用了team_membership_path(@ team.team_memberships.where(user_id:member.id).first – HeroicEric 2012-01-04 17:32:33

+0

好酷,對,我忘記了'.first';) – Robin 2012-01-04 17:33:51

相關問題