3

我有一个蜻蜓应用程序来管理我的图像上传:

  • 红宝石 2.1.3
  • 导轨 4.1.6

上传有效,但在更新操作时,当文件为空时,我收到以下消息:

用户控制器中的 ActionController::ParameterMissing#update_avatar

参数丢失或值为空:用户

这是有道理的,因为我在提交时没有传递任何参数。但是验证呢?

模型:

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)
4

2 回答 2

1

所以这是你问题的答案,我知道这个答案有点太晚了,但也许其他人会觉得它有帮助。我遇到了同样的问题。

https://github.com/rails/rails/issues/17947

简而言之,如果file_field为空,则表单将不会为该文件提交任何参数。您将在以上两个答案的链接中找到如何解决您的问题。与hiden_field_tag或与params.fetch(:user, {})

于 2017-08-30T18:29:10.967 回答
0

尝试在更新操作中使用此代码:

@user = User.find(params[:id])
于 2015-01-14T09:27:17.593 回答