• (GoRails) 使用ActiveStorage给user添加上传头像功能。


    对activestorage的简单使用:

    头像库:uifaces.co。 可以使用大量设置好的头像图片。

    1.安装avatar

      rails active_storage:install

    2.user model建立has_one_attached关联。

    3.view上面添加代码:可以查看,修改头像

    • 用variant方法设置图像格式,需要安装gem 'mini_magick', (需要brew install imagemagick)
    • 提供了gem 'gravatar_image_tag', 可以使用helper方法

    4.代码太多,使用一个helper方法。

    module ApplicationHelper
      #...上略...
      def user_avatar(user, size=40)
        if user.avatar.attached?
          user.avatar.variant(resize: "#{size}x#{size}!")
        else
          gravatar_image_url(user.email, size: size)
        end
      end
    end

    这样_navbar.html.erb中也可以使用这个方法了

    5.因为用到了device,所有在controller配置参数白名单:

    class ApplicationController < ActionController::Base
      protect_from_forgery with: :exception
    
      before_action :configure_permitted_parameters, if: :devise_controller?
      before_action :masquerade_user!
    
      protected
    
        def configure_permitted_parameters
          devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
     +    devise_parameter_sanitizer.permit(:account_update, keys: [:name, :avatar])
        end
    end

    注意:⚠️

    Devise error: undefined method `current_sign_in_ip'

    首先看devise是否是最新版本gemfile,和gemfile.lock

    然后,检查migration中是否加上了这个属性current_sign_in_ip。如果没有的话

    • 第一个办法,user model中去掉devise_for :trackable
    • 第二个办法,加上这个属性,然后rails db:migrate
    rails g migration AddTrackingToUsers
    
    class AddTrackingToUsers
      def change
        add_column :users, :current_sign_in_ip, :string
        add_column :users, :last_sign_in_ip, :string
      end
    end
    
    rails db:migrate
  • 相关阅读:
    Xcode ARC,非ARC混搭
    Xcode GData库解析XML
    NSThread
    自定义UITableViewCell中的button实现视图切换
    UITableView
    iOS事件响应链
    结构体和NSData相互转换
    UIView的transform属性
    javascript垃圾回收机制
    ios8 滚动事件解放了
  • 原文地址:https://www.cnblogs.com/chentianwei/p/10081470.html
Copyright © 2020-2023  润新知