Rails 上传图片

1.新建一个项目

    rails new avatar

2.在项目的Gemfile中添加:

gem 'carrierwave'  
gem 'mini_magick'  

3.建立一个model

  rails g model user name:string email:string

4.建一个controller

  rails g controller users

5.为users表添加一个avatar字段

  rails g migration add_avatar_to_users avatar:string

6.rake db:migrate

7.生成Avatar

 rails generate uploader Avatar #将会生成文件app/uploaders/avatar_uploader.rb

8.为user的model user.rb添加如下代码,使表之间关联

 mount_uploader :avatar, AvatarUploader

9.接下来进行修改app/uploaders/avatar_uploader.rb

# encoding: utf-8

class AvatarUploader < CarrierWave::Uploader::Base

  # Choose what kind of storage to use for this uploader: 
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir  #定义上传到哪个文件夹下    
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"  
  end  

  def default_url  #可以定义默认图片,如过用户没有上传图片,则可以使用默认的图片    "avatar/#{version_name}.png"  
  end

  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
  def extension_white_list    
  %w(jpg jpeg gif png)   
  end  

10.添加routes

  resources :users

11.在user_controller.rb中

 def index
        @users = User.all
    end

    def new
        @user = User.new
    end

    def create
        @user = User.new(user_params)
        @user.save
        redirect_to user_index_path
    end


    # def update
    #     @user = User.find(params[:id])
    #     @user.update(user_params)
    #     redirect_to user_path
    # end

    private
        def user_params
            params.require(:user).permit(:name,:email,:avatar)
        end
end

12.views/user/

index.html.erb

<% @users.each do |user| %>
  <%= user.name%>
  <%= image_tag user.avatar_url if user.avatar %>
<%end %>


new.html.erb
<%= form_for @user, :url=>user_index_path do |f| %>
  <div class="field">
    <%= f.label :name %>
    <%= f.text_field :name %><hr/>
    <%= f.file_field :avatar %>
    <%= f.hidden_field :avatar_cache %>
  </div><hr/>
  <%= f.submit %>
<%end%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值