我正在尝试在更新前编辑params,所以如果没有输入密码则不需要
这是我的控制器
def update
@professional = Professional.find(params[:id])
request.params[:professional].delete("password") if params[:professional][:password].blank?
request.params[:professional].delete("password_confirmation") if params[:professional][:password_confirmation].blank?
puts params
if @professional.update_attributes(params[:professional])
redirect_to professionals_path
else
render action: "edit"
end
end
这是我的服务器反应
我将其设置为在删除密码密钥后打印params
"{"utf8"=>"✓", "_method"=>"put",
"authenticity_token"=>"AdJya2kGwbuQZ/VYRGnvBRJvWAw40B766gfObQidmdY=",
"professional"=>{"name"=>"Prometheus Deimos Dardanos",
"role"=>"Admin",
"email"=>"prometheus@mail.com"},
"commit"=>"Salvar", "action"=>"update",
"controller"=>"professionals", "locale"=>"pt-BR", "id"=>"1"}
然后请求作为POST失效并被重定向为PUT,密码密钥以params的形式返回。
cache: [POST /profissionais/1] invalidate, pass
Started PUT "/profissionais/1" for 127.0.0.1 at 2013-11-25 11:27:16 -0300
Processing by ProfessionalsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"AdJya2kGwbuQZ/VYRGnvBRJvWAw40B766gfObQidmdY=", "professional"=>{"name"=>"Prometheus Deimos Dardanos", "role"=>"Admin", "email"=>"prometheus@mail.com",
"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Salvar", "locale"=>"pt-BR", "id"=>"1"}
Professional Load (0.4ms) SELECT "professionals".* FROM "professionals" WHERE "professionals"."id" = 1 LIMIT 1
Professional Load (0.1ms) SELECT "professionals".* FROM "professionals" WHERE "professionals"."id" = ? LIMIT 1 [["id", "1"]]
(0.1ms) begin transaction
(0.1ms) rollback transaction"
正如您所看到的,当我打印params时,它没有密钥密码。
答案 0 :(得分:0)
尝试将控制器更改为:
def update
@professional = Professional.find(params[:id])
request.params[:professional].delete("password") if params[:professional][:password].blank?
request.params[:professional].delete("password_confirmation") if params[:professional] [:password_confirmation].blank?
puts params
if @professional.update_attributes(params[:professional])
redirect_to professionals_path
else
puts @professional.errors
render action: "edit"
end
end
这样您就可以理解为什么它没有正确更新资源。