2012-02-17 4 views
3

그것은 마치 &처럼 보이지만, has_many를 다룰 때 db에서 레코드를 제거합니다. 어쨌든 이것을하지 않을 것입니까? 다른 말로하면 has_mnay 컬렉션을 메서드에 전달하기 전에 트림하고 싶습니다만, 변경 사항을 db에 유지하고 싶지는 않습니다. 콘솔에 시도에서, 내가하는 방법에 이르기까지 계정을 확인만을 전달하려는 것처럼 나는db에서 삭제하지 않고 has_many에서 레코드를 제거 하시겠습니까? (레일 2.3.5)

second_acct = users.accounts[1] 
users.accounts.delete(second_acct) 

내 사용 사례가 될 것이다 뭔가를 할 때 즉시 삭제하는 것, 그래서에서이 계정을 제거하려면 사용자.

+0

여기에 분명히하기 위해 DB를 건드리지 않으려 고합니다. 메모리의 관계 만 제거하고 싶습니다. – Joelio

+1

이것을 수행 할 방법을 찾았습니까? –

답변

0
second_acct = users.accounts[1] 
second_acct.update_attribute(:user_id, nil) 

이렇게하면됩니다.

또는이 :

second_acct.user = nil 
second_acct.save 
-2

당신의 관계가 어떻게 설정되어?

collection.delete(object, …) 
    Removes one or more objects from the collection by setting their foreign keys to NULL. Objects will be in addition destroyed if they’re associated with :dependent => :destroy, and deleted if they’re associated with :dependent => :delete_all. 

그래서 당신이 원하지 않는 경우, 귀하의 기록을 삭제하고 만 연관이 :dependent => :destroy 또는 :dependent => :delete_all 옵션을 제거, 삭제 될 수 있습니다.

+0

나는 depend => : destroy를 가지고 있는데, 정말로 삭제하면 db에서 제거되기를 바란다. 위의 경우 데이터베이스를 건드리지 않으려 고합니다. 메모리의 컬렉션에서 제거하십시오. – Joelio

관련 문제