【发布时间】:2015-07-01 00:13:26
【问题描述】:
因此,我在为移动客户端创建的 RESTful API 实现端点时观察到一些奇怪的行为。我正在使用 PUT 方法更新 User 模型上的属性。我将用户的 id 作为 URL 参数和要在 JSON 对象中更新的值发送。一切似乎都很好,但是当我通过 rails 日志检查参数时,我发现了一些奇怪的东西。由于某种原因,有一个额外的参数被发送到后端,我似乎无法解释。以下是我从移动客户端调用此端点时看到的日志:
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。
-
没有 RESTFul api 的形式。我可以发布命中端点时调用的代码吗?这是你的意思吗? @Coderhs
标签: ruby-on-rails ruby put restful-architecture