2012-05-12 7 views
0

私は2つのモデルUserとAccountを持っていますが、AccountUsersを通して多対多の関係を持っています。ユーザーは自分のアカウントに他のユーザーを招待できますが、認証されたユーザーが招待されたユーザー(または共同編集者)を削除できるようにすることもできます。私は、ユーザーオブジェクトではなく、結合テーブル内の関連付けまたは行を削除したいだけです。そして、私はこれをどうやって行うのか、具体的にどのように私のルートを設定し、メソッドとリンクを破壊すべきかについてはあまりよく分かりません。Rails 3.2との結合テーブルの行を削除します。

私の方法は、現在、次のようになります。

def destroy 
    @account.users.delete(collaborator) 
end 

私のリンクは次のようになります。私も直接@account.users.delete(collaborator)を入れて試してみました

= link_to "Remove collaborator", collaborator, confirm: "You sure?", :method => :delete 

これは、現在

undefined method `user_path' for #<#<Class:0x007fe3fc4f2378>:0x007fe3fe718510> 

になり私のlink_toでは、それはクリックされる前に行を削除します。

私のルートは現在、次のようになります。このような

resources :accounts do 
    resources :projects 
    resources :invitations 
    resources :collaborators, :only => [:index] 
end 

そして、私のモデル協会:

# User 
has_many :account_users 
has_many :accounts, through: :account_users, :dependent => :destroy 

# Account 
belongs_to :user 
has_many :account_users 
has_many :users, through: :account_users 

どのように、私は私が望むものを達成することができるようにするには何をすべき?

私の破壊操作がある別のコントローラ(コラボレータ)はありません。これはユーザーコントローラにはありません。

ありがとうございました。あなたはこの

resources :collaborators, :only => [:index] 

を持っており、また、アカウントにネストされている場合

+0

のようになりますか? – Suborx

+0

@Suborxこれは私のCollaboratosコントローラにあり、インデックスアクションもあります。 – Anders

答えて

2

問題がルートにあるかもしれません。だから、routes.rbを少し

resources :accounts do 
    resources :projects 
    resources :invitations 
    resources :collaborators 
end 

を書き換える試すことができますし、あなたのリンクは、あなたが破壊する作用を有しんどのコントローラでこの

= link_to 'Remove collaborator', accounts_colaborator_path(@account,@colaborator), :method => :delete 
+0

ありがとう、私はそれを働かせた。私はまたこのような破壊操作を変更しました: 'def destroy @account = Account.find(params [:account_id]) collaborator = User.find(params [:id]) @ account.users.delete(協力者) redirect_to account_collaborators_path flash [:success] = "コラボレータが削除されました。" end' – Anders

関連する問題