любая помощь будет наиболее ценной, я довольно новичок в Rails.
У меня есть две модели: Список покупок и Продукт. Я хочу сохранить / обновить несколько товаров в списке покупок одновременно.
Предлагаемые изменения не обновляют модели. Я гуглил и отвечаю "attr_accessor" или find_or_create_by?
Попытка 1 - Существующий код
Ошибка
> unknown attribute 'products_attributes' for Product.
Request
Parameters:
{"_method"=>"patch",
"authenticity_token"=>"3BgTQth38d5ykd3EHiuV1hkUqBZaTmedaJai3p9AR1N2bPlHraVANaxxe5lQYaVcWNoydA3Hb3ooMZxx15YnOQ==",
"list"=>
{"products_attributes"=>
{"0"=>{"title"=>"ten", "id"=>"12"},
"1"=>{"title"=>"two", "id"=>"13"},
"2"=>{"title"=>"three", "id"=>"14"},
"3"=>{"title"=>"four", "id"=>"15"},
"4"=>{"title"=>"five", "id"=>"16"},
"5"=>{"title"=>""},
"6"=>{"title"=>""},
"7"=>{"title"=>""},
"8"=>{"title"=>""},
"9"=>{"title"=>""},
"10"=>{"title"=>""}}},
"commit"=>"Save Products",
"id"=>"7"}
Попытка 2 - ошибок нет страница перезагрузится, и ни одно из ожидаемых полей не будет обновлено. Серьезно, я гуглюсь и копирую и вставляю фрагменты кода в тщетной надежде разблокировать правильную комбинацию. Добавлено в режим продуктов
class Product < ApplicationRecord
attr_accessor :products_attributes
belongs_to :list, optional: true
end
<%= content_tag(:h1, 'Add Products To This List') %>
<%= form_for(@list) do |f| %>
<%= f.fields_for :products do |pf| %>
<%= pf.text_field :title %><br>
<% end %>
<p>
<%= submit_tag "Save Products" %>
</p>
<% end %>
<%= link_to "Back To List", lists_path %>
список контроллеров
def update
#render plain: params[:list].inspect
@list = List.find(params[:id])
if @list.products.update(params.require(:list).permit(:id, products_attributes: [:id, :title]))
redirect_to list_path(@list)
else
render 'show'
end
список моделей
class List < ApplicationRecord
has_many :products
accepts_nested_attributes_for :products
end
оригинал ничего не делать - модель продукта
class Product < ApplicationRecord
belongs_to :list, optional: true
end