В базе (коллекция users) записи хранятся в следующем виде:
"_id" : ObjectId("some id"),
"admin" : "Name",
"items" : [
{
"name" : "some name,
"img" : "some url",
"price" : 3000,
"cat" : "category name",
"active" : "1",
"id" : 1,
"desc" : "description"
},
#_form.html.erb
<%= form_for(@bot) do |f| %>
<div class="container">
<div class="form-group">
<%= f.label "Условия доставки" %><br>
<%= f.text_area :delivery_info, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label "Email" %><br>
<%= f.text_field :email, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label "Контактная информация" %><br>
<%= f.text_area :contacts_info, class: "form-control" %>
</div>
<div class="field">
<%= @bot.items.each do |item| %>
<%= f.fields_for item do |i| %>
<div class="field">
<%= i.label :name %><br />
<%= i.text_field :name %>
</div
<% end %>
<% end %>
</div>
<div class="actions">
<%= f.submit "Сохранить", class: 'btn btn-success'%>
</div>
</div>
<% end %>
#item.rb
class Item
include Mongoid::Document
embedded_in :bot
field :name, type: String
field :price, type: Integer
field :cat, type: String
field :desc, type: String
field :img, type: String
end
#bot.rb
require 'digest/md5'
class Bot
include Mongoid::Document
store_in collection: 'bots'
embeds_many :items
field :admin, type: String
field :delivery_info, type: String
field :email, type: String
field :contacts_info, type: String
field :link, type: String
field :token, type: String
end
Нет проблем с выводом списка items у конкретного user, но непонятно, как редактировать item.
UPD: когда пытаюсь обновить значение name у item, получаю сообщение
Processing by BotsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"тут токен==", "bot"=>{"delivery_info"=>"Самовывз", "email"=>"тут email", "contacts_info"=>"telegram", "item"=>{"name"=>"Пальто"}}, "commit"=>"Сохранить", "id"=>"5790edbe3993951addde4b23"}
Unpermitted parameter: item
То есть он пытается поменять атрибут item, а у объекта модели Bot только атрибут items. Непонятно, как исправить.