因此,我在爲移動客戶端創建的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