我们可以通过文件上传在Rails中上传文件。在本教程中, 我们将学习如何上传文件。
让我们看一个通过Rails上传文件的例子。
例:
步骤1创建一个名为upload的Rails应用程序。
rails new upload
步骤2更改要上传的目录。
cd upload
步骤3安装以下Gem。
gem install carrierwave
gem install bootstrap-sass
步骤4转到目录中的Gemfile并添加以下gem。
gem 'carrierwave'
gem 'bootstrap-sass'
步骤5运行以下命令。
bundle install
步骤6使用两个字符串作为名称和附件创建一个模型。
rails g model Resume name:string attachment:string
【Rails文件上传实例详细图解】步骤7迁移数据库。
rake db:migrate
步骤8在你的应用程序中生成控制器文件。
rails g controller Resumes index new create destroy
步骤9在这一步中, 我们将通过carrierwave gem创建一个上传器。
rails g uploader attachment
步骤10现在打开app / models / resume.rb模型文件, 并编写以下代码。
class Resume <
ApplicationRecord
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
步骤11转到config / routes.rb文件并编写以下代码。
resources :resumes, only: [:index, :new, :create, :destroy]
root "resumes#index"
步骤12转到app / controllers / resumes_controller.rb文件并编写以下代码。
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: "Successfully uploaded."
else
render "new"
end end def destroy
@resume = Resume.find(params[:id])
@resume.destroy
redirect_to resumes_path, notice:"Successfully deleted."
end private
def resume_params
params.require(:resume).permit(:name, :attachment)
end end
步骤13在app / assets / stylesheets / resumes.scss文件中添加引导程序。
@import "bootstrap";
步骤14转到app / views / layouts / application.html.erb文件并编写以下代码。
<
!DOCTYPE html>
<
html>
<
head>
<
title>
File Uploading<
/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>
<
%= yield %>
<
/div>
<
/body>
<
/html>
步骤15转到app / views / documents / index.html.erb文件。
<
div class="container">
<
% if !flash[:notice].blank? %>
<
div>
<
%= flash[:notice] %>
<
/div>
<
% end %>
<
br>
<
%= link_to "New Resume", new_resume_path %>
<
br>
<
br>
<
table border="3">
<
thead>
<
tr>
<
th>
Candidate Name<
/th>
<
th>
Download Link<
/th>
<
th>
Action<
/th>
<
/tr>
<
/thead>
<
tbody>
<
% @resumes.each do |resume| %>
<
tr>
<
td>
<
%= resume.name %>
<
/td>
<
td>
<
%= link_to "Download", resume.attachment_url %>
<
/td>
<
td>
<
%= link_to "Delete", resume, method: :delete, confirm: "Are you sure you want to delete #{resume.name}?" %>
<
/td>
<
/tr>
<
% end %>
<
/tbody>
<
/table>
<
/div>
步骤16转到app / views / documents / new.html.erb文件。
<
div class="container">
<
% if !@resume.errors.empty? %>
<
div>
<
ul>
<
% @resume.errors.full_messages.each do |msg| %>
<
li>
<
%= msg %>
<
/li>
<
% end %>
<
div class="container">
<
% if !@resume.errors.empty? %>
<
div>
<
ul>
<
% @resume.errors.full_messages.each do |msg| %>
<
li>
<
%= msg %>
<
/li>
<
% end %>
<
/ul>
<
/div>
<
% end %>
<
div>
<
%= form_for @resume, html: { multipart: true } do |f| %>
<
%= f.label :name %>
<
%= f.text_field :name %>
<
br>
<
br>
<
%= f.label :attachment %>
<
%= f.file_field :attachment %>
<
br>
<
%= f.submit "Save" %>
<
% end %>
<
/div>
<
/div>
步骤17现在启动服务器。
rails s
步骤18在浏览器上运行此链接http:// localhost:3000 /
以下页面将出现在你的面前。
文章图片
单击新简历。
文章图片
点击保存按钮。你的文档将被上传。
文章图片
要下载此文档, 请单击” 下载” 链接。
要删除此文档, 请单击” 删除” 链接。
文章图片
下载
下载此示例
推荐阅读
- Ruby on Rails CRUD操作图解
- Rails 3种缓存用法和实例
- Ruby on Rails 5 Hello World示例
- Rails脚本工具使用介绍
- Ruby on Rails RVM版本管理用法
- Ruby on Rails MVC开发基本概念
- Rails IDE或编辑器介绍
- Ruby Active Record解释和用法例子
- Ruby on Rails目录结构解释