Абсолютно застрял, пытаясь создать вложенную ассоциацию в форме рельсов с помощью has_many через

Я опубликовал предыдущий вопрос об этом, и мне посоветовали прочитать много соответствующей информации. Я прочитал его и попытался реализовать около 30 различных решений. Ни один из которых не работал для меня.

Вот'что ямы получили

У меня есть модель Miniatures. У меня есть модель производителя. У миниатюр есть много производителей ЧЕРЕЗ модель Productions.

Кажется, что ассоциации установлены правильно, так как я могу показать их в своих представлениях и создать их через консоль. Проблема в том, что я разрешаю представлениям Miniatures NEW и EDIT создавать и обновлять таблицу Productions.

В консоли команда@miniature.productions.create(manufacturer_id: 1) работает, что приводит меня к мысли, что я должен быть в состоянии сделать то же самое в форме.

Я ДУМАЮ, что моя проблема всегда в контроллере Miniatures и, в частности, в функции CREATE. Я испробовал там множество решений других людей, и никто не добился цели. Также возможно, что мой field_for материал в моей форме неправильный, но это кажется менее рискованным.

Я застрял на этом в течение нескольких дней, и хотя есть и другие вещи, над которыми я мог бы поработать, если эта ассоциация нетогда я могуМне нужно переосмыслить всю мою заявку.

Форма теперь создает строку в таблице Productions, но неt включает все важные factory_id.

Любая помощь очень ценится.

Моя новая миниатюрная форма


Add a miniature


  
    
      
      
      
       
      
      
      
      
       Date.current.year, :end_year => 1970, :include_blank => true %>

      
    
  

Контроллер миниатюр

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

Миниатюрная модель

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

Производственная модель

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



end

Модель производителя

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

Ответы на вопрос(1)

Ваш ответ на вопрос