关于Rails上的Ruby:用于破坏has_many的视图/控制器:通过Association

View/Controller for Destroying a has_many :through Association

我有用户,团队和TeamMemberships,它们与has_many:through相关。

我正在尝试添加从团队中删除用户的功能,这需要销毁与他们相关联的TeamMembership模型。

我的模型如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 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

该视图当前如下所示:

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

我正在寻求有关"删除用户"按钮的实施的帮助。我不确定如何传递需要销毁的TeamMembership。


1
2
3
4
5
6
7
resources :teams do
    resources :users do
        member do
            delete :remove_from_team
        end
    end
end

在用户控制器中:

1
2
3
4
5
6
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

在视图中

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

您也可以只有

1
resources :team_memberships

并在team_memberships控制器中执行销毁操作

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

但是即使用户从不单击链接,也需要查询以获取每个成员的team_membership ...