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