1

has_many:throughに関連付けられているユーザー、チーム、チームメンバーがいます。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をどのように渡すかわからない。ユーザーコントローラで

答えて

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コントローラを持っていたので、2番目のオプションを使用しました。 唯一のことは、ActiveRecord :: RelationではなくTeamMembership自体を渡すことです。 私はteam_membership_path(@ team.team_memberships.where(user_id:member.id).first – HeroicEric

+0

を使っていました。よろしく、 '.first';を忘れました;) – Robin

関連する問題