У меня есть вложенная форма, и я хочу сохранить хэш в поле field_form, но этот только сохраняет последнее значение в параметрах.Рубин на рельсах. Вложенная форма из field_form возвращает хеш вместо хеша массива.
Это мой контроллер
def new
@inventory_products = []
@inventory = Inventory.new
@products = Product.all
@products.each do |p|
@inventory_products << p.inventory_products.build
end
end
Это форма
<%= form_for @inventory do |f| %>
<%= render 'shared/error_messages', object: f.object%>
<%= f.label :description, "Description" %>
<%= f.text_area :description, class: 'form-control' %>
<%= f.label :warehouse, "Warehouse" %>
<%= f.select :warehouse_id, options_for_select(Warehouse.all.map {
|b| [ b.name, b.id ] }),
prompt: "foobar"%>
<%= f.label :products, "Productos" %>
<table class = "table table-bordered">
<thead>
<tr>
<th>+</th>
<th>Codigo</th>
<th>Nombre</th>
<th>Cantidad a Ingresar</th>
</tr>
</thead>
<tbody>
<% @inventory_products.each_with_index do |i, index|%>
<%= f.fields_for "inventory_products[]", i do |iv|%>
<tr>
<td>
<%= iv.check_box :product_id, {class: 'add_product',checked:false},iv.object.product_id.to_s, "0" %>
</td>
<td><%= @products[index].code %></td>
<td><%= @products[index].name %></td>
<td>
<%= iv.number_field :quantity, class:"form-control quantity#{iv.object.product_id.to_s}", readonly: true %>
</td>
</tr>
<% end %>
<% end %>
Inventory модель
class Inventory < ApplicationRecord
has_many :inventory_products
has_many :products, through: :inventory_products
belongs_to :warehouse
accepts_nested_attributes_for :inventory_products
validates:description, presence:true, length: {maximum:150}
end
Inventory Модель продукта
class InventoryProduct < ApplicationRecord
belongs_to :product
belongs_to :inventory
accepts_nested_attributes_for :product
validates:quantity, presence:true, numericality: { greater_than: 0}
end
Модель продукта
class Product < ApplicationRecord
has_many :inventory_products
has_many :inventories, through: :inventory_products
end
Params
<ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"xwu4sCQCCCWOwXqbJkvVl9MDs2HRmjdT8IL2eMdMi0KHbibzHuQNmIWpot7fVqohvvxDlMIAEBzlDZB0OW3DCQ==", "inventory"=>{"description"=>"", "warehouse_id"=>"", "inventory_products"=>{"product_id"=>"1", "quantity"=>""}}, "commit"=>"Agregar", "controller"=>"inventories", "action"=>"create"}
Можете ли вы включить модели, о которых идет речь, и каков желаемый результат? То, что вы делаете, выглядит как взломанная версия того, как следует использовать 'fields_for' и' accepts_nested_attributes', но трудно понять, чего вы на самом деле пытаетесь выполнить. – max
Что нужно добавить к вопросу - это описание высокого уровня «При создании заказа aa пользователь должен иметь возможность ... и затем ...» – max
Я обновляю модель @max и изменяю заголовок вопроса, также ставит params post, inventory_products для fields_for возвращают только хеш вместо хеша массива –