0

이것은 레일 3 앱이며 혼란 스럽습니다. 나는이 있습니다has_many : through 및 accepts_nested_attributes_for duplicating records

class Coleta < ActiveRecord::Base 
    has_many :coletas_produtos 
    has_many :produtos, through: :coletas_produtos 

    accepts_nested_attributes_for :produtos 
end 

class Produto < ActiveRecord::Base 
    has_many :coletas 
    has_many :coletas_produtos, through: :coletas 
end 

class ColetasProduto < ActiveRecord::Base 
    belongs_to :produto 
    belongs_to :coleta 
end 

나는 새로운 Coleta을 저장하려고 할 때, 나는 이런 식으로 작업을 수행합니다

def create 
    @coleta = Coleta.new(params[:coleta]) 

    respond_to do |format| 
    if @coleta.save 
     format.html { redirect_to(coletas_path, :notice => "Coleta cadastrada com sucesso.") } 
    else 
     format.html { render :action => "new" } 
    end 
    end 
end 

을 그리고 이것은 내 양식이다 :이 때문에 노력하고 있습니다

<%= form_for(@coleta) do |f| %> 
    <%= f.fields_for :produtos do |p| %> 
    <div class="field left"> 
     <%= p.label :codigo, "Código" %><br /> 
     <%= p.text_field :codigo %> 
    </div> 
    <% end %> 
<% end %> 

coletas_produtos 테이블 아래에 올바른 레코드를 만듭니다. 내 문제는 produtos 관계가 아닌 다 대다 관계 만 저장하기를 원한다는 것입니다.

테이블의 레코드를 coletas_produtos의 레코드와 함께 저장합니다. 저는 최신 기록 만 무시하고 보관하고 싶습니다.

가장 좋은 방법은 무엇입니까?

답변

1

has_many...through 관계 정의에 약간의 조정이 필요합니다.

# app/models/produto.rb 
class Produto < ActiveRecord::Base 
    has_many :coletas_produtos 
    has_many :coletas, through: :coletas_produtos 
end 

올바른 정의는 "has_many :through"관계를 참조하십시오. 당신의 ColetasController#new에서 다음

는 :

# app/controllers/coletas_controller.rb 
def new 
    @coleta = Coleta.new 
    @coleta.coletas_produtos.build |cp| do 
    @produto = cp.build_produto 
    end 
end 

Coleta의 새로운 인스턴스를 인스턴스화하고 new 행동에 coletas_produtosproduto 관련된 필요한 모든 관계를 즉 구축 할 것입니다.

+0

죄송합니다. 나는 그것을 알아. 대단히 감사합니다 :) – renatojf

+0

@renatojf 같은 시나리오가 있습니다. 솔루션을 공유하면 좋을 것입니다. –