Я нашел другой способ загрузки изображений в рельсы.Я пришел к заключению, что это лучший метод, который я знаю до сих пор.Вы должны использовать carrierwave gem.Сейчас я поставлю код, необходимый для его использования.В любом случае, если вы можете проверить репозиторий GitHub или этот пост .
Хорошо, так что давайте.Сначала вам нужно будет установить драгоценный камень глобально, но даже локально в вашем проекте.
$ gem install carrierwave
В Rails добавьте его в свой Gemfile:
gem 'carrierwave', '~> 1.0'
Теперь перезапустите сервер, чтобы применить изменения.
Начните с создания загрузчика:
rails generate uploader Photos
это должно дать вам файл в:
# app/uploaders/photos_uploader.rb
class PhotosUploader < CarrierWave::Uploader::Base
storage :file
# will save photos in /app/public/uploads
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
Создание фотографий миграции
class CreatePhotos < ActiveRecord::Migration
def change
create_table :photos do |t|
t.string :name, :null => false
t.binary :data, :null => false
t.string :filename
t.string :mime_type
t.timestamps null: false
end
end
end
И модель
require 'carrierwave/orm/activerecord'
class Photo < ActiveRecord::Base
mount_uploader :data, PhotosUploader
end
Затем контроллер
class PhotosController < ApplicationController
def index
@photos = Photo.all
end
def show
@photo = Photo.find(params[:id])
end
def new
@photo = Photo.new
end
def create
# build a photo and pass it into a block to set other attributes
@photo = Photo.new(photo_params)
# normal save
if @photo.save
redirect_to(@photo, :notice => 'Photo was successfully created.')
else
render :action => "new"
end
end
private
def photo_params
params.require(:photo).permit!
end
end
Загрузка формы:
<!-- new.html.erb -->
<%= form_for(@photo, :html => {:multipart => true}) do |f| %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :data %>
<%= f.file_field :data %>
</div>
<div class="actions">
<%= f.submit "Upload" %>
</div>
<% end %>
И вы загружаете файл в таком виде, как это.
<!-- show.html.erb -->
<h3>Photo: <b><%= @photo.name %></b></h3>
<%= image_tag @photo.data.url %>
Вы также можете запустить модальное изображениезагрузить вот так:
# app/assets/javascripts/photos.coffee
$ ->
alert('Photo Uploaded - You can launch modal here')
Хорошо, вот и все.Дайте мне знать, как идут дела!