ruby-on-rails - 提交时为空 file_field : param is missing or the value is empty

标签 ruby-on-rails validation ruby-on-rails-4 file-upload dragonfly-gem

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

  • ruby 2.1.3
  • rails 4.1.6

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

ActionController::ParameterMissing in UsersController#update_avatar

param is missing or the value is empty: user

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

型号:

class User < ActiveRecord::Base
  dragonfly_accessor :avatar
  
  ...

  validates_presence_of :avatar

  ...

Controller :

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

View :

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

最佳答案

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

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

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

关于ruby-on-rails - 提交时为空 file_field : param is missing or the value is empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26787498/

相关文章:

ruby-on-rails-4 - 使用 Ruby on Rails 以编程方式填写现有的可填写 PDF 文件

ruby-on-rails - rails - select_tag 在使用 map 时默认为空白

ruby-on-rails - 如何从 Redis 缓存中获取对象而不是哈希?

mysql - 如何在 Ubuntu 16.04 中通过 XAMPP 在 Rails 中使用 MySQL

javascript - 是的,当 .required() 为 false 时,会继续在同一个属性上运行验证器

node.js - meteor 自动形成简单模式 : how to customize validation message?

javascript - jQuery.Validate - 如何将错误结果放在不同的地方?

ruby-on-rails - 为什么在 Gemfile 中包含一个 gem 可以解决 Railtie 问题,即使这个 gem 已经包含在 Gemfile.lock 中?

ruby-on-rails-4 - Rails - 在迁移期间将表保留在 structure.sql 之外

ruby-on-rails - Rails 页面特定维护模式