0

這是一個rails 3應用程序,它讓我感到困惑。我有這樣的:has_many:通過和accepted_nested_attributes_for複製記錄

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關係。

它一直保存在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我有同樣的情況。如果你分享你的解決方案,那將是非常棒的。 –

相關問題