Absolutamente preso tentando criar associação aninhada em forma de trilhos com has_many através de

Eu postei uma pergunta anterior sobre isso e fui aconselhado a ler muitas informações relevantes. Eu li e tentei implementar cerca de 30 soluções diferentes. Nenhum dos quais funcionou para mim.

Aqui está o que tenho.

Eu tenho um modelo de miniaturas. Eu tenho um modelo de fabricantes. Miniaturas têm muitos fabricantes através de um modelo de produção.

As associações parecem estar configuradas corretamente, pois posso mostrá-las em minhas visualizações e criá-las pelo console. Onde eu tenho um problema é deixar as visualizações Miniatures NEW e EDIT criar e atualizar para a tabela Productions.

No console, o comando@miniature.productions.create(manufacturer_id: 1) funciona, o que me leva a acreditar que eu deveria ser capaz de fazer o mesmo de uma forma.

Eu acho que o meu problema está sempre no controlador de miniaturas e, especificamente, a função CREATE. Eu tentei uma tonelada de soluções de outros povos lá e nenhum fez o truque. Também é possível que meu campo_ para coisas em minha forma esteja errado, mas isso parece menos complicado.

Eu estive preso nisso por dias e enquanto há outras coisas que eu poderia trabalhar, se essa associação não for possível, então eu preciso repensar meu aplicativo inteiro.

O formulário agora cria uma linha na tabela Productions, mas não inclui o importante manufacturer_id.

Qualquer ajuda muito apreciada.

Minha nova forma em miniatura

<% provide(:title, 'Add miniature') %>
<h1>Add a miniature</h1>

<div class="row">
  <div class="span6 offset3">
    <%= form_for(@miniature) do |f| %>
      <%= render 'shared/error_messages', object: f.object %>
      <%= f.label :name %>
      <%= f.text_field :name %>
       <%= f.fields_for :production do |production_fields| %>
      <%= production_fields.label :manufacturer_id, "Manufacturer" %>
      <%= production_fields.select :manufacturer_id, options_from_collection_for_select(Manufacturer.all, :id, :name) %>
      <% end %>
      <%= f.label :release_date %>
      <%= f.date_select :release_date, :start_year => Date.current.year, :end_year => 1970, :include_blank => true %>

      <%= f.submit "Add miniature", class: "btn btn-large btn-primary" %>
    <% end %>
  </div>
</div>

Controlador de miniaturas

class MiniaturesController < ApplicationController
   before_action :signed_in_user, only: [:new, :create, :edit, :update]
   before_action :admin_user,     only: :destroy

  def productions
    @production = @miniature.productions
  end

  def show
    @miniature = Miniature.find(params[:id])
  end

  def new
    @miniature = Miniature.new 
  end

  def edit
    @miniature = Miniature.find(params[:id])
  end

  def update
    @miniature = Miniature.find(params[:id])
    if @miniature.update_attributes(miniature_params)
      flash[:success] = "Miniature updated"
      redirect_to @miniature
    else
      render 'edit'
    end
  end
  def index
    @miniatures = Miniature.paginate(page: params[:page])
  end

  def create
    @miniature = Miniature.new(miniature_params)
    if @miniature.save
      @production = @miniature.productions.create
      redirect_to @miniature
    else
      render 'new'
    end
  end

  def destroy
    Miniature.find(params[:id]).destroy
    flash[:success] = "Miniature destroyed."
    redirect_to miniatures_url
  end

private
    def miniature_params
      params.require(:miniature).permit(:name, :release_date, :material, :scale, :production, :production_attributes)
    end

    def admin_user
      redirect_to(root_url) unless current_user.admin?
    end

    def signed_in_user
      unless signed_in?
        store_location
        redirect_to signin_url, notice: "Please sign in."
      end
    end
end

Modelo em miniatura

class Miniature < ActiveRecord::Base
  has_many :productions, dependent: :destroy
  has_many :manufacturers, :through => :productions
  accepts_nested_attributes_for :productions

    validates :name, presence: true, length: { maximum: 50 }
    validates :material, presence: true
    validates :scale, presence: true
    validates_date :release_date, :allow_blank => true

  def name=(s)
    super s.titleize
  end

end

Modelo de produção

class Production < ActiveRecord::Base
    belongs_to :miniature
    belongs_to :manufacturer



end

Modelo do fabricante

class Manufacturer < ActiveRecord::Base
    has_many :productions
    has_many :miniatures, :through => :productions
    validates :name, presence: true, length: { maximum: 50 }
    accepts_nested_attributes_for :productions
end

questionAnswers(1)

yourAnswerToTheQuestion