Absolut festgefahren beim Versuch, mit has_many through eine verschachtelte Assoziation in Schienenform zu erstellen

Ich habe eine frühere Frage dazu gestellt und es wurde empfohlen, viele relevante Informationen zu lesen. Ich habe es gelesen und versucht, ungefähr 30 verschiedene Lösungen zu implementieren. Nichts davon hat für mich funktioniert.

Hier ist was ich habe.

Ich habe ein Miniaturmodell. Ich habe ein Herstellermodell. Miniaturen haben viele Hersteller durch ein Productions-Modell.

Die Verknüpfungen scheinen korrekt eingerichtet zu sein, da ich sie in meinen Ansichten anzeigen und über die Konsole erstellen kann. Ich habe ein Problem damit, dass die Ansichten "Miniaturen NEU" und "BEARBEITEN" erstellt und in der Tabelle "Produktionen" aktualisiert werden.

In der Konsole den Befehl@miniature.productions.create(manufacturer_id: 1) funktioniert, was mich zu der Überzeugung bringt, dass ich in der Lage sein sollte, dasselbe in einer Form zu tun.

Ich denke, mein Problem liegt immer im Miniatures Controller und speziell in der CREATE-Funktion. Ich habe dort eine Menge anderer Leute ausprobiert und keine hat den Trick getan. Es ist auch möglich, dass mein field_for-Zeug in meinem Formular falsch ist, aber das scheint weniger umständlich zu sein.

Ich bin schon seit Tagen dabei und obwohl es noch andere Dinge gibt, an denen ich arbeiten könnte, müsste ich meine gesamte Bewerbung überdenken, wenn diese Zuordnung nicht möglich ist.

Das Formular erstellt jetzt eine Zeile in der Productions-Tabelle, enthält jedoch nicht die alle wichtigen manufacturer_id.

Jede Hilfe sehr geschätzt.

Meine neue Miniaturform

<% 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>

Miniaturen-Controller

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

Miniaturmodell

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

Serienmodell

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



end

Herstellermodell

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage