KP
Модель:
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
Заранее спасибо