Вложенная форма Rails с помощью has_many: through - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть 3 модели, модель продукта связана с моделью фирмы через модель product_categories.Я хочу создать форму, где я могу добавить продукт с их категорией, в форме фирмы.

Модель фирмы

class Firm < ApplicationRecord
 has_many :product_categories
 has_many :products, through: :product_categories
 accepts_nested_attributes_for :product_categories
end

Модель продукта

class Product < ApplicationRecord
 has_many :product_categories
 has_many :firms, through: :product_categories
 has_many :variants, class_name: 'ProductVariant'
end

Категория продукта

class ProductCategory < ApplicationRecord
 belongs_to :product
 belongs_to :firm
 accepts_nested_attributes_for :product
end

Так выглядит моя форма создания для фирмы

<%= form_with(model: @firm, local: true) do |form| %>
  firm.fields...
  <%= form.fields_for :product_categories do |prod_c_f| %>
   product_category.fields...
     <%= prod_c_f.fields_for :product do |prod_f| %>
      product.fields...
     <% end %>
  <% end %>
  <%= form.submit "Create Firm", class: 'btn btn-primary 
  btn-block ' %>
<% end %>

А это мой контроллер

def create
@firm = Firm.new

@firm.product_categories.build.build_product
 respond_to do |format|
  if @firm.save
   format.html { redirect_to firms_path, notice: '...' }
  else
  format.html { render :new }
  end
 end
end

Это параметры

params.require(:firm).permit(:title, 
product_categories_attributes:[ product_attributes: 
[:title, :price, :description]])

И форма не отображается:

And the form doesn't display

...