【问题标题】:View/Controller for Destroying a has_many :through Association用于销毁 has_many 的视图/控制器:通过关联
【发布时间】:2012-01-04 01:56:09
【问题描述】:

我有用户、团队和团队成员,它们与 has_many :through 相关联。

我正在尝试添加从团队中删除用户的功能,这需要销毁关联他们的 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"

我正在寻求有关完成“删除用户”按钮实现的帮助。我不知道如何传递我需要销毁的 TeamMembership。

【问题讨论】:

    标签: ruby-on-rails views associations has-many-through controllers


    【解决方案1】:
    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...

    【讨论】:

    • 谢谢。我选择了第二个选项,因为我已经有了一个 team_memberships 控制器。唯一的事情是确保您传递 TeamMembership 本身而不是 ActiveRecord::Relation。所以我使用了 team_membership_path(@team.team_memberships.where(user_id: member.id).first
    猜你喜欢
    • 2015-06-01
    • 1970-01-01
    • 2017-11-05
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多