如何从AMS 0.10.0.rc4反序列化中删除参数?

时间:2016-03-21 00:13:57

标签: active-model-serializers

给出以下user_params:

  def user_params
    ActiveModelSerializers::Deserialization.jsonapi_parse!(params.to_unsafe_h)
  end

我无法删除参数以执行需要删除:current_password的特定操作。以前,下面这一行完成了这项工作:

user_params.delete(:current_password) 

但是,自从实现0.10.0.rc4以来,有问题的操作会生成ActiveRecord :: UnknownAttributeError(User的未知属性'current_password'。)

user.update_without_password(user_params) 

我不确定这是错误还是语法错误,所以我决定发布SO而不是他们的Github回购。

1 个答案:

答案 0 :(得分:0)

更新#1

根据BF4的要求,我在AMS Github上就此问题创建了issue #1610。与此同时,下面的原始帖子是一种解决方法,同时创建了最终修复。

原帖

我找不到删除params的方法,但使用.except(a)就像下面的Update方法一样:

  # Render the updated User using UserSerializer and the AMS Deserialization.
  def update
    # Check if password is blank, if so, clear :current_password
    # and update without password, else updates password.
    if user_params[:password].blank? || user_params[:current_password].blank?
      user.update_without_password(user_params.except(:current_password,:password))
      render json: user
    else
      if user.update_with_password(user_params)
        render json: user, status: :ok
      else
        render json: user.errors, status: :unprocessable_entity
      end
    end
  end