У меня есть модель курса и контроллер с некоторыми атрибутами, включая изображение, которое я ранее загрузил с использованием carrierwave, и оно работало хорошо, тогда я хотел реализовать ActiveStorage для сохранения изображения на s3, но не смог, поэтому я вернулся к использованию carrierwave, но теперь я получаю "неопределенный метод" image_size "для # Вы имели в виду? image_was" я не знаю откуда и почему это вызывается. Пожалуйста помоги.
Я строго использую драгоценные камни ниже:
gem 'rails', '5.2.0'
gem 'bootstrap-sass', '3.3.7'
gem 'puma', '3.9.1'
gem 'sass-rails', '5.0.6'
gem 'uglifier', '3.2.0'
gem 'coffee-rails', '4.2.2'
gem 'jquery-rails', '4.3.1'
gem 'turbolinks', '5.0.1'
gem 'jbuilder', '2.7.0'
gem 'bcrypt', '3.1.12'
gem 'carrierwave', '1.2.2'
gem 'mini_magick', '4.7.0'
gem 'aws-sdk-s3', require: false
class Course < ApplicationRecord
mount_uploader :image, CourseUploader
#has_one_attached :image
belongs_to :coordinator
validates :name, presence: true, length: {minimum: 4}
validates :prerequisite, presence: true, length: {minimum: 4}
validates :description, presence: true, length: {minimum: 4}
validate :image_size
validates :coordinator_id, presence: true
has_many :votes, dependent: :destroy
has_and_belongs_to_many :locations
has_and_belongs_to_many :categories
end
class CourseUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def extension_whitelist
%w(jpg jpeg gif png)
end
end
class CoursesController < ApplicationController
def create
@course = current_coordinator.courses.build(course_params)
if @course.save
flash[:success] = "Course created!"
redirect_to current_coordinator
else
render 'new'
end
end
private
def course_params
params.require(:course).permit(:name, :prerequisite, :description, :image, category_ids: [], location_ids: [])
end
def set_course
@course = Course.find(params[:id])
end
end
<%= form_for @course do |f| %>
<%= render 'shared/error_courses', object: @course %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name,class: 'form-control' %><br>
<%= f.label :prerequisite %>
<%= f.text_field :prerequisite,class: 'form-control' %><br>
<%= f.label :description %>
<%= f.text_area :description, size: '20x5',class: 'form-control' %><br>
<%= f.label :category %>:
<%= f.collection_check_boxes :category_ids, Category.all, :id, :category %><br>
<br>
<%= f.label :location %>:
<%= f.collection_check_boxes :location_ids, Location.all, :id, :location %><br>
<!-- <%= f.label :image %> --><br>
<%= f.file_field :image %>
<div class="btn-sub">
<%= f.submit yield(:button_text), class: "btn btn-primary" %>
</div>
</div>
<% end %>
ЗДЕСЬ ЖУРНАЛ:
app/controllers/courses_controller.rb:27:in `create'
Started POST "/courses" for 127.0.0.1 at 2019-05-24 00:23:52 +1000
Processing by CoursesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"PwMJV5VdgTDulH2scefofWuA3AdtVamdTqbn6nXY5HxOJOgVlv7OjsakmXt2qqipDHOzh1FRybRB0EF10n3hlQ==", "course"=>{"name"=>"hshs", "prerequisite"=>"shsh", "description"=>"shahs", "category_ids"=>[""], "location_ids"=>[""]}, "commit"=>"Create a course"}
Coordinator Load (0.2ms) SELECT "coordinators".* FROM "coordinators" WHERE "coordinators"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
Category Load (0.1ms) SELECT "categories".* FROM "categories" WHERE 1=0
Location Load (0.1ms) SELECT "locations".* FROM "locations" WHERE 1=0
(0.1ms) begin transaction
(0.1ms) rollback transaction
Completed 500 Internal Server Error in 143ms (ActiveRecord: 3.4ms)
NoMethodError (undefined method `image_size' for #<Course:0x00007f802b4fba70>
Did you mean? image_was):
app/controllers/courses_controller.rb:27:in `create'