Я использую драгоценный кокон для вложенных атрибутов
У меня есть модель продукта, которая имеет много размеров.
Создание продукта и его размеров работает хорошо
Я могу обновить атрибуты :size_name
и / или :quantity
, если размер существует.И я могу уничтожить размер.Хорошо ...
Но я НЕ МОГУТ увеличить размер существующего продукта.
Есть ли решение для увеличения размера в существующем продукте?
В модели продукта у меня есть:
has_many :sizes, inverse_of: :product, dependent: :destroy
accepts_nested_attributes_for :sizes, reject_if: :all_blank, allow_destroy: true
в моей products_controller.rb
def update
if @product.update_attributes(params_product)
respond_to do |format|
format.html {redirect_to admin_product_path(@product)}
format.js
end
else
render :edit
end
end
def params_product
params.require(:product).permit(
:id,
:title,
:ref,
:brand,
:description,
:buying_price,
:price,
:category_id,
:color,
{ attachments:[]},
sizes_attributes: [:id, :size_name, :quantity, :_destroy]
)
end
форма редактирования
<%= f.simple_fields_for :sizes do |size| %>
<%= render "size_fields", f: size %>
<% end %>
<div class="links">
<%= link_to_add_association "Ajouter une taille", f, :sizes, partial: "size_fields", class: "btn btn-secondary btn-lg" %>
</div>
частичное
<div class="nested-fields">
<div class="row">
<div class="col-12 col-md-4">
<%= f.input :size_name, label: false, placeholder: "Taille", autofocus: true %>
</div>
<div class="col-12 col-md-4">
<%= f.input :quantity, label: false, placeholder: "Quantité dans cette taille" %>
</div>
<div class="col-12 col-md-4">
<%= link_to_remove_association "supprimer cette taille", f, class: "btn btn-danger delete_size" %>
<hr>
</div>
</div>
</div>
Если вам нужно больше кода, не стесняйтесь спрашивать:)
ОБНОВЛЕНИЕ
Тест функции принимает обновления для существующего размера, но Capybara не находит новые поля длядобавить новый размер ... (WIP)
Вот журналы, когда я добавляю новый уровень в существующий продукт
Started PATCH "/admin/products/26" for 127.0.0.1 at 2019-02-16 11:31:51 +0100
[1m[36mUser Load (0.4ms)[0m [1m[34mSELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2[0m [["id", 23], ["LIMIT", 1]]
↳ /Users/johan/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Processing by Admin::ProductsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xG3tRqzIC0XP4quanEo2589zbsSiJcwICXjIt9ecndDsKjwYIDSBVZ4P62woGNgnCYHhBiM2jXmZlQjz9CK2fQ==", "product"=>{"category_id"=>"8", "brand"=>"Side Park", "title"=>"Jean", "color"=>"Bleu", "price"=>"30.0", "buying_price"=>"5.0", "ref"=>"SP02", "description"=>"Paalablalntalon blab", "sizes_attributes"=>{"0"=>{"size_name"=>"L", "quantity"=>"3", "_destroy"=>"false", "id"=>"97"}, "1"=>{"size_name"=>"S", "quantity"=>"3", "_destroy"=>"false", "id"=>"95"}, "2"=>{"size_name"=>"M", "quantity"=>"4", "_destroy"=>"false", "id"=>"96"}}}, "commit"=>"Mettre à jour l'article", "id"=>"26"}
[1m[36mProduct Load (0.3ms)[0m [1m[34mSELECT "products".* FROM "products" WHERE "products"."id" = $1 LIMIT $2[0m [["id", 26], ["LIMIT", 1]]
↳ app/controllers/admin/products_controller.rb:62
[1m[35m (0.1ms)[0m [1m[35mBEGIN[0m
↳ app/controllers/admin/products_controller.rb:49
[1m[36mSize Load (0.5ms)[0m [1m[34mSELECT "sizes".* FROM "sizes" WHERE "sizes"."product_id" = $1 AND "sizes"."id" IN ($2, $3, $4)[0m [["product_id", 26], ["id", 97], ["id", 95], ["id", 96]]
↳ app/controllers/admin/products_controller.rb:49
[1m[35m (0.2ms)[0m [1m[35mCOMMIT[0m
↳ app/controllers/admin/products_controller.rb:49
Redirected to http://localhost:3000/admin/products/26
Completed 302 Found in 13ms (ActiveRecord: 1.0ms)