因此,我在为移动客户端创建的RESTful API实现端点时观察到一些奇怪的行为。我正在使用PUT方法更新User
模型上的属性。我将用户的ID作为URL参数发送,并在JSON对象内部更新值。一切似乎工作得很好,但当我通过rails日志检查参数时,我发现了一些奇怪的东西。出于某种原因,有一个额外的参数被发送到后端,我似乎无法解释。下面是当我把这个端点从移动客户端,我看到日志:Ruby on Rails - PUT方法创建额外参数条目
Parameters: {"enable_security"=>true, "id"=>"7d7fec98-afba-4ca9-a102-d5d71e13f6ce", "user"=>{}}
从以上的额外"user"=>{}
可以看到被追加到参数项的列表。当我打印params对象时,我也看到了这一点。我似乎无法解释这是从哪里来的。我还检查了移动客户端,以确保安全,并且在代码中我没有发送带有密钥user
的参数的地方。这令我非常困惑,并让我觉得我错过了一件相当简单的事情。为什么有user
密钥被发送到后端RESTful API的空对象?
更新,以提供更多的信息
这里是被调用的代码,当用户点击该更新用户User
模型端点:
#PUT /:id/user/update_security_settings
def update_security_settings
@user = User.find_by_id(params[:id])
@user.advanced_security_enabled = params[:enable_security]
respond_to do |format|
if @user.save
response = {:status => "200", :message => "User's security settings updated."}
format.json { render json: response, status: :ok }
else
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
更新响应用户的评论
以下是与user_controller
相关的路线,视图控制器定义所有端点都涉及创建和更新User
模型。
post '/user/upload_profile', to: 'user#upload_profile'
get '/:id/user', to: 'user#find_user'
put '/:id/user/update_security_settings', to: 'user#update_security_settings'
resources :user, :defaults => { :format => 'json' }
您可以发布您提交的表单吗?如果我没有弄错,我可以在那里存在User.new。 – coderhs
RESTFul api没有任何形式。我可以发布终端命中时调用的代码吗?这是你的意思吗? @Coderhs – ScottOBot