2011-01-08 3 views
1

제품을 파괴됩니다 판매 아이팟) : belongs_to => :. 나는 주어진 제품을 삭제하면 제품은, 다른 하나는 가 (아이팟 클래식처럼)

그래서, 그것을 가리키는 모든 리스팅이 삭제 얻을 의미가 있습니다, 디자인입니다 그러나

, I. 두 제품을 하나에 병합하고 목록을 결합하는 "병합"기능을 작성하고 있습니다. 따라서 두 제품이 "iPod Co lor "및"iPod Classic "을 선택하고 두 개를 병합하고 싶습니다. 내가하고 싶은 것은 "아이팟 클래식에 병합, 아이팟 컬러"라고하고, 결과는해야한다 : 아이팟 컬러리스트가 PRODUCT_ID 후 아이팟 클래식 제품

  • 에 다시 지적되는 모든
    1. 변경이 상장 (들)
    2. 내가 다음 "아이팟 색상"제품

    음을 삭제 저장, 그게 전부는 목록을 삭제하지 않고, 잘 작동합니다. 그러나, 나는이 컨트롤러를 가지고 있는데, 아이팟 컬러 제품을 파기 할 때 어떤 이유로 든, 아이팟 클래식으로 옮겨지고 데이터베이스에 저장되었다는 것을 확인한 후에도 이전에 가리킨리스트 "iPod Color"도 파괴되고, 나는 이유를 알아낼 수 없다. 그것은 마치 그들이 파괴 된 제품에 어떤 종류의 연결을 유지하고있는 것처럼, 따라서 스스로 파괴되기 시작합니다.

    나는 고통스럽게 뻔한 것이 무엇입니까?

    def merge 
        merging_from = Product.find(params[:id]) 
        merging_to = Product.find_by_model(params[:merging_to]) 
    
        unless merging_to.nil? 
         unless merging_from.nil? 
         unless merging_from == merging_to # you don't want to merge something with itself   
          merging_from.listings.each do |l| 
          l.product = merging_to 
          l.save 
          end 
    
          # through some debugging, I've confirmed that my missing Listings are disappearing as a result of the following destroy call 
          merging_from.destroy 
         end 
         end 
        end 
    
  • 답변

    4

    동일한 동작을 보았고 다시로드 해 보았습니다.

    def merge 
        merging_from = Product.find(params[:id]) 
        merging_to = Product.find_by_model(params[:merging_to]) 
    
        if merging_from && merging_to && merging_from != merging_to 
        merging_to.listings << merging_from.listings 
        merging_from.reload.destroy 
        end 
    end 
    
    +0

    천재. 그랬어! – jefflunt

    +0

    http://ar.rubyonrails.org/classes/ActiveRecord/Base.html#M000409 – jefflunt

    +0

    위대한 답변, 어떻게 그 행동을 설명합니까? – apneadiving

    관련 문제