2012-05-12 54 views
0

我有兩種模型,用戶和帳戶,他們通過AccountUsers有多對多的關係。用戶可以邀請其他用戶訪問其帳戶,但我也希望通過身份驗證的用戶能夠刪除受邀用戶(或合作者)。我只想要關聯或連接表中的行被刪除,而不是用戶對象。我不太清楚如何做到這一點,具體如何設置我的路線,銷燬方法和link_to。使用Rails 3.2刪除連接表中的行

我的方法目前看起來是這樣的:

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

我的鏈接看起來是這樣的:

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

目前這導致

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

我也試圖直接把@account.users.delete(collaborator)在我的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 

如何,我應該怎樣做才能夠達到我想要什麼?

不是我有一個單獨的控制器(協作者),其中我的銷燬行動位於,它不在我的用戶控制器。

謝謝。

+0

在控制器你有沒有破壞作用? – Suborx

+0

@Suborx它位於我的Collaboratos控制器中,我也有索引操作。 – Anders

回答

2

的問題可能會在路線,當你有這個

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

,也嵌套在帳戶。所以,你可以嘗試重寫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 def @account = Account.find(params [:account_id]) collaborator = User.find(params [:id]) @ account.users.delete(合作者) redirect_to account_collaborators_path flash [:success] =「協作者已移除。」 end' – Anders