0

Это приложение для рельсов 3, и это меня сбивает с толку. У меня есть это:has_many: through and accepts_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 

При попытке сохранить новый Колет, я делаю это так:

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 и построить все необходимые отношения, т.е. связанные coletas_produtos и produto в вашем new действия.

+0

извините за поздний отклик. Я понял. Большое спасибо :) – renatojf

+0

@renatojf У меня такой же сценарий. Было бы здорово, если бы вы поделились своим решением. –

Смежные вопросы