对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