Rails控制器#update为params提供了错误的类型

时间:2013-12-12 01:01:17

标签: ruby-on-rails ruby-on-rails-4 strong-parameters

我想使用controller#update更新模型。我想通过AJAX这样做,没有隐藏的表单或任何DOM元素来与我的JS数据保持同步。

如何通过jQuery ajax将数据提交给控制器#update?

我的JS:

$.ajax({
  type: "PATCH",
  url: "/uploads/" + current_upload.id,
  data: { 
    "upload[user]": user.id,
    "upload[upload]": current_upload.id 
  }
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

我的控制器:

  def update
    @upload = Upload.find(params[:id])

    # update the model.
    if @upload.update(upload_params)
      redirect_to @post
    else
      render 'edit'
    end
  end

  private
    def upload_params
      # permit! allows all attributes.
      params.require(:upload).permit(:user)
    end

错误:

User(#70101060061080) expected, got String(#70101055761460)

2 个答案:

答案 0 :(得分:2)

"upload[user]": user.id更改为"upload[user_id]": user.id

在Rails中,它试图将user(用户实例)指定为您通过user.id传入的字符串,并抱怨类型不匹配。

答案 1 :(得分:0)

听起来您的请求参数将“upload”参数设置为“13”而不是哈希值。