3

我有一个应用程序蜻蜓来管理我的图片上传:上提交空的是,file_field:参数是丢失或为空值

  • 红宝石2.1.3
  • 轨4.1.6

上传的作品,但在更新动作,当文件是空,我有以下消息:

的ActionController :: ParameterMissing在UsersController#update_avatar

参数是丢失或为空值:用户

使其感觉,因为我传递提交任何PARAMS。但是验证呢?

型号:

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 

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' 

... 

我在做什么错?验证似乎不起作用。

UPDATE:

我传递通过hidden_​​field的ID参数(我不喜欢这种解决方案),并解决parcial问题。

但验证仍不起作用。

= hidden_field(:user, :id) 

回答

0

尝试使用这个代码在你的更新动作:

@user = User.find(params[:id]) 
0

因此,这里是回答你的问题,我知道是有点太晚了这个答案,但也许其他人会发现它有帮助。我遇到了同样的问题。

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

在短,如果是file_field空接形式不会为文件提交任何参数。你会在上面的链接找到两个答案如何解决你的问题。可以使用hiden_field_tag或使用params.fetch(:user, {})

相关问题