【发布时间】:2022-11-13 15:49:21
【问题描述】:
我在用着:ruby 2.6rails 6.1.4devisedevise_token_authactive-storage 使用本地磁盘服务
我正在创建可以存储和上传图片的 api。我可以通过 Insomnia 上传图片,但问题是当我想向同一个用户添加第二张图片时。图像只是替换。
user.rb
# frozen_string_literal: true
class User < ActiveRecord::Base
def initialize
self.pictures = []
end
extend Devise::Models #added this line to extend devise model
# Include default devise modules. Others available are:
# :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :confirmable
include DeviseTokenAuth::Concerns::User
VALID_USERNAME_REGEX= /^(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/ix
validates :username, presence: true, length: {minimum:3, maximum:26},
format: { with: VALID_USERNAME_REGEX, :multiline => true,
message: :invalid_username }
validate :password_complexity
attr_accessor :pictures
has_many_attached :pictures
validates :pictures, content_type: ['image/png', 'image/jpg', 'image/jpeg'],
size: { less_than: 5.megabytes , message: :invalid_size }
def password_complexity
return if password.blank? || password =~ /^((?!.*[\s]))/
errors.add :password, :invalid_password
end
end
application_controller.rb
class ApplicationController < ActionController::API
include DeviseTokenAuth::Concerns::SetUserByToken
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:account_update, keys: [:pictures, :username, :email])
end
end
我使用的所有控制器都默认来自devise_token_auth。我找到了要添加的提示config/application.rb
config.active_storage.replace_on_assign_to_many = false
但在那之后我总是得到status 500
【问题讨论】:
标签: ruby-on-rails ruby api rails-activestorage