Rails文件上传实例详细图解

我们可以通过文件上传在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

步骤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 /

以下页面将出现在你的面前。

Rails文件上传1

单击新简历。

Rails文件上传2

点击保存按钮。你的文档将被上传。

Rails文件上传3

要下载此文档, 请单击”下载”链接。

要删除此文档, 请单击”删除”链接。

Rails文件上传4

下载

下载此示例

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?