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 ...