У меня есть модель продукта и модель изображения (на основе скрепки).Полиморфная ассоциация и вложенные атрибуты
class Product < ActiveRecord::Base
has_many :images, as: :imageable,
dependent: :destroy
accepts_nested_attributes_for :images
end
class Image < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
has_attached_file :picture
end
Я хочу, чтобы добавить изображение для моих продуктов в одной и той же странице я создаю продукт (/products/new
). Вот форма:
<%= form_for(@product, html: { multipart: true}) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div>
<%= f.label :name, t('product.name') %>
<%= f.text_field :name %>
</div>
<div class="file_field">
<%= f.fields_for :image do |images_form| %>
<%= images_form.file_field :image %>
<% end %>
</div>
<%= f.submit @submit_button %>
<% end %>
Тогда я иду к /products/new
странице, я заполнить поля и нажмите на кнопку отправки. Сервер пытается отобразить страницу показа продукта, но она не работает, потому что изображение не было сохранено. У меня есть следующее сообщение об ошибке:
undefined method `picture' for nil:NilClass
в следующей строке в шоу-странице продукта
image_tag(@product.images.first.picture.url(:medium))
Интересно, почему изображение не сохранено, и я вижу, что сервер делает следующее сообщение:
Unpermitted parameters: images_attributes
Поэтому я добавил атрибуты изображения в разрешении продуктов Params (like there):
def product_params
params.require(:product).permit(:name, :sharable, :givable, image_attributes: [:name, :picture_file_name, :picture_content_type, :picture_file_size])
end
Но это ничего не меняет, у меня всегда такое же сообщение об ошибке. У вас есть идея, откуда возникает проблема разрешения?
'params.require (: продукт) .permit (: имя,: совместно используемых,: givable, image_attributes: [: name:: picture_file_name,: picture_content_type,: picture_file_size]) 'to' params.require (: product) .permit (: name,: sharable,: givable,: image) ' –