gpt4 book ai didi

ruby-on-rails-4 - Rails 4 Paperclip with Devise,文件保存错误

转载 作者:行者123 更新时间:2023-12-01 12:40:46 28 4
gpt4 key购买 nike

我正在使用带有回形针的 devise gem 来处理身份验证和上传图片。问题是我在同一个模型上两次使用回形针来存储两张图片(我们称这些回形针列为 :avatar 、 :superbadge),我的模型名称是 User。

现在,当我选择上传两张图片时,我的 Rails 应用程序会忽略我选择的第一个文件,而是使用第二个选择的文件并将其保存在第一个回形针列中,将第二个回形针列留空.我该如何解决?

我的应用程序 Controller :

class ApplicationController < ActionController::Base
protect_from_forgery with: :exception

before_action :configure_devise_permitted_parameters, if: :devise_controller?

protected

def configure_devise_permitted_parameters
registration_params = [:name, :email, :password, :password_confirmation,:avatar,:superstarbadge]

if params[:action] == "update"
devise_parameter_sanitizer.for(:account_update) {
|u| u.permit(registration_params << :current_password)
}
elsif params[:action] == "create"
devise_parameter_sanitizer.for(:sign_up) {
|u| u.permit(registration_params)
}
end
end
end

我的 User.rb 模型:

class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :validatable
has_attached_file :avatar, :styles => { :small => "100x100>" }
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/

has_attached_file :superstarbadge, :styles => { :tiny => "100x100>" }, :default => "superbadge.jpg"
validates_attachment_content_type :superstarbadge, :content_type => /\Aimage\/.*\Z/

has_many :questions
has_many :answers

def to_s
email
end
end

我的 form_for 用于使用 devise gem 创建新用户(我使用的是 slim 模板语言而不是 erb):

h1 Sign up

= form_for(resource, as: resource_name, url: registration_path(resource_name), :html => { :multipart => true }) do |f|
= devise_error_messages!

.field
label= f.label :name
= f.text_field :name, autofocus: true

.field
label= f.label :email
= f.email_field :email, autofocus: true

.field
label= f.label :password
= f.password_field :password, autocomplete: 'off'

.field
label= f.label :password_confirmation
= f.password_field :password_confirmation, autocomplete: 'off'

.field
= f.label :avatar
= f.file_field :avatar

.field
= f.file_field :avatar

div
= f.submit "Sign up"

最佳答案

表单中的 file_field's 都引用 avatar 字段,因此当您提交表单时,第二个选择的文件(即 latest)被保存为 avatarsuperstarbadge 没有file_field,所以它永远不会被保存。

avatar 需要一个file_fieldsuperstarbadge 需要一个file_field。因此,您的代码应如下所示:

.field
= f.label :avatar
= f.file_field :avatar

.field
= f.file_field :superstarbadge ## This one should be superstarbadge and NOT avatar

关于ruby-on-rails-4 - Rails 4 Paperclip with Devise,文件保存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25023914/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com