Всем привет! Ребят, я только учусь, помогите пожалуйста разобраться с гемом paperclip, что я не так делаю: ночью решил поучиться работать с графическими файлами. Установил paperclip, прописал команду rails g paperclip badge avatar, но выдает ошибку: PG::NotNullViolation: ERROR: null value in column "avatar" violates not-null constraint DETAIL. Скриншоты прилагаю. Если я правильно научился смотреть в логи, то при сохранении объекта в атрибут avatar и правда ничего не идет, но я не понимаю почему...
Модель:
class Badge < ApplicationRecord
has_many :user_badges, dependent: :destroy
has_many :users, through: :user_badges
has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
validates :avatar, attachment_presence: true
validates :title, :rule, presence: true
validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\z/
BADGE_RULES = %w[finish_all_tests first_try finish_all_tests_by_level].freeze
end
Контроллер:
def create
@badge =
Badge.new(badge_params)
if
@badge.save
redirect_to admin_badge_path, notice: t('.success')
else
render :new, alert: t('.failure')
end
end
private
def set_badge
@badge = Badge.find(params[:id])
end
def badge_params
params.require(:badge).permit(:avatar, :title, :rule)
end
Форма:
<%= form_with model: [:admin,
@badge], local: true do |form| %>
<%= render 'shared/errors', resource:
@badge %>
<div class="form-group">
<p>
<%= form.label :title %>
<%= form.text_field :title, class: 'form-control' %>
</p>
<p>
<%= form.label :avatar %>
<%= form.file_field :avatar, as: :file %>
</p>
<p>
<%= form.label :rule %>
<%=
form.select :rule, Badge::BADGE_RULES, class: 'from-control' %>
</p>
<p>
<%= form.submit class: 'btn btn-primary'%>
</p>
</div>
<% end %>
Миграция, созданная после команды rails g paperclip badge avatar:
class AddAttachmentAvatarToBadges < ActiveRecord::Migration[5.2]
def self.up
change_table :badges do |t|
t.attachment :avatar
end
end
def self.down
remove_attachment :badges, :avatar
end
end
Заранее спасибо