2012-05-12 2 views
0

두 개의 모델 인 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 플래시 [: success] = "공동 작업자가 제거되었습니다." end' – Anders

관련 문제