我有一个应用 with dragonfly 来管理我的图片上传:
上传有效,但在更新操作时,文件为空时,我有以下消息:
ActionController :: UsersController中的ParameterMissing#update_avatar
param丢失或值为空:user
因为我在提交时没有传递任何参数,所以它会产生感觉。但验证呢?
型号:
class User < ActiveRecord::Base
dragonfly_accessor :avatar
...
validates_presence_of :avatar
...
控制器:
class UsersController < ApplicationController
...
def update_avatar
@user = User.find_by(id: current_user.id)
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to edit_user_avatar_url, notice: t('flash.actions.update_avatar.notice') }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
...
def user_params
params.require(:user).permit(:username, :name, :avatar, :birth)
end
end
查看:
- case params[:action]
...
- when 'edit_avatar', 'update_avatar'
= form_for @user, url: { action: 'update_avatar'} do |f|
ul.list-form
li.item-form
= f.label :avatar
span.label-title
' Foto:
= f.file_field :avatar
.submit-area
= button_tag "<span class='wrapper'>Update Avatar</span>".html_safe, class: 'bt'
...
我做错了什么?验证似乎无效。
更新
我通过hidden_field传递了 id 参数(我不喜欢这个解决方案......)并解决了这个问题。
但验证仍无效。
= hidden_field(:user, :id)
答案 0 :(得分:0)
尝试在更新操作中使用此代码:
@user = User.find(params[:id])
答案 1 :(得分:0)
所以这是你的问题的答案,我知道这个答案有点太迟了,但也许其他人会发现它有用。我遇到了同样的问题。
https://github.com/rails/rails/issues/17947
简而言之,如果file_field
为空,则表单不会提交该文件的任何参数。你会在上面的链接上找到两个答案如何解决你的问题。使用hiden_field_tag
或使用params.fetch(:user, {})
。