У меня есть две модели User и Image как полиморфная ассоциация, потому что я хочу, чтобы моя модель изображения использовалась повторно в других моделях.
class User < ApplicationRecord
has_one :cart
has_many :images, as: :imageable, dependent: :destroy
accepts_nested_attributes_for :images
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_validation :set_name, on: :create
validates :name, presence: true
private
def set_name
self.name = "person#{rand(1000)}" if self.name.blank?
end
end
class Image < ApplicationRecord
mount_uploader :image, ImageUploader
belongs_to :imageable, polymorphic: true
end
И я сделал Image полиморфным: true и использую gem carrierwave для создания загрузчика`mount_uploader mount_uploader: изображение, ImageUploader в модели изображения: изображение
class ImageUploader < CarrierWave::Uploader::Base
end
and I permit :image parameters to each model: User and Good,
module Admin
class UsersController < BaseController
before_action :set_admin_user, only: [:show, :edit, :update, :destroy]
def users_list
@admin_users = User.all.preload(:images).where(admin: true)
end
def show
end
def edit
end
def update
if @user.images.update(admin_user_params)
redirect_to admin_users_list_path, notice: 'User was successfully updated'
else
flash[:alert] = 'User was not updated'
end
end
def destroy
end
private
def set_admin_user
@user = User.find(params[:id])
end
def admin_user_params
params.require(:user).permit(:name, :email, images_attributes: [:image])
end
end
end
В форме просмотра у меня есть следующий код:
<%= form_for [:admin, @user], html: { multipart: true } do |f| %>
<%= f.label 'Name', class: 'form-group' %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.fields_for :images_attributes do |i| %>
<%= i.label :image %>
<%= i.file_field :image %>
<% end %>
<%= f.label 'Email', class: 'form-group' %>
<%= f.text_field :email, class: 'form-control' %>
<%= f.submit class: 'btn btn-oultline-primary' %>
<% end %>
, но когда я хочу обновить пользователя дляНапример, чтобы загрузить изображение, я получил следующее:
Вот что я получил в ответ
Я не могу сохранить загрузку своего изображения.Это почему?Я ожидаю вставки в БД, но этого не происходит, и в БД у меня нет прикрепленных изображений.