Ruby on Rails - Dosya Yükleme
Site ziyaretçilerinizin sunucunuza bir dosya yüklemesini istediğiniz bir gereksiniminiz olabilir. Raylar, bu gereksinimi karşılamayı çok kolaylaştırır. Şimdi basit ve küçük bir Rails projesiyle devam edeceğiz.
Her zamanki gibi, adlı yeni bir Rails uygulamasıyla başlayalım. testfile. Basit rails komutunu kullanarak uygulamanın temel yapısını oluşturalım.
tp> rails new testfile
Uygulama geliştirmeye başlamadan önce, aşağıda gösterildiği gibi gem dosyalarını yüklemeliyiz -
gem install carrierwave
gem install bootstrap-sass
Gemfile'ınızı açın ve aşağıdaki resimde gösterildiği gibi alt tarafa aşağıdaki iki taşı ekleyin -
Gem dosyasına değerli taşlar ekledikten sonra konsolda aşağıdaki komutu çalıştırmamız gerekiyor -
bundle install
Modeli Oluşturmak
Aşağıda gösterildiği gibi ad ve ek olarak iki dizeli bir model oluşturmamız gerekiyor -
rails g model Resume name:string attachment:string
Veritabanı geçişini aşağıda gösterildiği gibi oluşturmamız gerekiyor -
rake db:migrate
Denetleyiciyi aşağıda gösterildiği gibi oluşturmamız gerekiyor -
rails g controller Resumes index new create destroy
Harika! Şimdi temel yapıyı kurduk. Şimdi bir yükleyici oluşturmamız gerekiyor. Bir Yükleyici, carrierwave gem'den geldi ve carrierwave'e dosyaları nasıl kullanacağını söyler. Kısacası, tüm dosya işleme işlevlerini içeriyordu. Aşağıda gösterildiği gibi bir yükleyici oluşturmak için komutu çalıştırın
rails g uploader attachment
Şimdi devam ettirme modelini açın ve yükleyiciyi aşağıda gösterildiği gibi arayın. Özgeçmiş modeli app / models / resume.rb konumuna yerleştirildi -
class Resume < ActiveRecord::Base
mount_uploader :attachment, AttachmentUploader # Tells rails to use this uploader for this model.
validates :name, presence: true # Make sure the owner's name is present.
end
Controller üzerinde çalışmadan önce, config / route.db dosyamızı aşağıda gösterildiği gibi değiştirmemiz gerekiyor -
CarrierWaveExample::Application.routes.draw do
resources :resumes, only: [:index, :new, :create, :destroy]
root "resumes#index"
end
Denetleyiciyi aşağıda gösterildiği gibi düzenlememize izin verin.
class ResumesController < ApplicationController
def index
@resumes = Resume.all
end
def new
@resume = Resume.new
end
def create
@resume = Resume.new(resume_params)
if @resume.save
redirect_to resumes_path, notice: "The resume #{@resume.name} has been uploaded."
else
render "new"
end
end
def destroy
@resume = Resume.find(params[:id])
@resume.destroy
redirect_to resumes_path, notice: "The resume #{@resume.name} has been deleted."
end
private
def resume_params
params.require(:resume).permit(:name, :attachment)
end
end
Css file.css dosyasında bootstrap uygulamasını ekleyelim app / assets / stylesheets / resumes.css.scss olabilir
@import "bootstrap";
Şimdi app / views / layouts / application.html.erb dosyasını açın ve aşağıda gösterildiği gibi kodları ekleyin -
<!DOCTYPE html>
<html>
<head>
<title>Tutorialspoint</title>
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
</head>
<body>
<div class = "container" style = "padding-top:20px;">
<%= yield %>
</div>
</body>
</html>
Şimdi aşağıda gösterildiği gibi dizin görünümlerini ayarlamamız gerekiyor -
<% if !flash[:notice].blank? %>
<div class = "alert alert-info">
<%= flash[:notice] %>
</div>
<% end %>
<br />
<%= link_to "New Resume", new_resume_path, class: "btn btn-primary" %>
<br />
<br />
<table class = "table table-bordered table-striped">
<thead>.
<tr>
<th>Name</th>
<th>Download Link</th>
<th> </th>
</tr>
</thead>
<tbody>
<% @resumes.each do |resume| %>
<tr>
<td><%= resume.name %></td>
<td><%= link_to "Download Resume", resume.attachment_url %></td>
<td><%= button_to "Delete", resume, method: :delete, class: "btn btn-danger", confirm: "Are you sure that you wish to delete #{resume.name}?" %></td>
</tr>
<% end %>
</tbody>
</table>
Şimdi new.html.erb'yi düzenleyelim ve form kodumuzu ekleyelim.
<% if [email protected]? %>
<div class = "alert alert-error">
<ul>
<% @resume.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class = "well">
<%= form_for @resume, html: { multipart: true } do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :attachment %>
<%= f.file_field :attachment %>
<%= f.submit "Save", class: "btn btn-primary" %>
<% end %>
</div>
Şimdi sunucuyu başlatın ve http: // localhost: 3000 adresini ziyaret edin. Aşağıdakine benzer bir ekran oluşturacaktır -
Yapmamız gereken son bir şey, izin verilen dosya türlerinin listesini filtrelemektir. Bunun için app / uploaders / attachment_uploader.rb adresinde gösterildiği gibi basit bir kod eklememiz gerekiyor.
class AttachmentUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def extension_white_list
%w(pdf doc htm html docx)
end
end
Şimdi sunucuyu başlatın ve http: // localhost: 3000 adresini ziyaret edin. Şimdi yanlış bir format girin; aşağıda gösterildiği gibi yanlış bir mesaj oluşturacaktır -
Hakkında eksiksiz bir ayrıntı için File nesne, geçmeniz gerekiyor Ruby Reference Manual.