描述我的工作环境:Rails 4.2.4、Ruby 2.3.1、SQL Server数据库、对象html视图上的JavaScript
我的控制器,内容更新操作:
if @cs.update_attributes(cs_params_update)
flash[:notice] = "Centro de Saúde #{t(:record_successfully_updated)}"
# format.html { render :action => 'edit', :cs_id => @cs.id }
# Permance na mesma página após o update
format.html { redirect_to({:controller => :cs, :action=>:edit,
:method => :get,
:cs_id => @cs.id
})}
format.xml { head :ok }
else
format.html { render({:controller => :cs, :action=> :edit }) }
format.xml { render :xml => @cs.errors, :status => :unprocessable_entity }
end
当我尝试编辑如下http://localhost:3000/cs/1/edit和保存的东西,这是要调用一个验证错误对我的控制器的更新行动,验证显示错误验证,而不是渲染它重定向到显示URL如下http://localhost:3000/cs/1失去/edit后缀
我以前在一些stackoverflow问题中看到过这个问题->
How to make a render :edit call show the /edit in the address bar
Why the URL loses the '/edit' suffix after a failed validation?
在我的情况下,我需要用途:渲染,因为我的取消按钮是发送我到显示由于网址,我不能去显示,我需要留在编辑后,点击取消按钮。
在我看来,我使用JavaScript,允许您启用和禁用元素,按照我的应用程序中的代码。js:
function EnablDisablElements(FieldsNames, Status){
if (FieldsNames) {
for (var h = 0; h < FieldsNames.length; h++) {
document.getElementById(FieldsNames[h]).disabled = Status;
}
}
}
2条答案
按热度按时间xfyts7mz1#
您正在成为Rails初学者常见的问题的受害者。您的应用程序实际上运行正常,但您期望的结果是错误的。
假设你有一个名为
products
的资源。在Rails中,
GET /products/1/edit
操作只是呈现一个表单。是idempotent action当你提交表单时,你发送的是没有后缀的
PATCH /products/1
。这是因为在REST中,您使用HTTP方法来传达正在发生的事情。URL上没有后缀。当重新呈现有错误的表单时,将显示执行非幂等操作的结果。您正在响应表单提交,并且该响应仅针对该请求。
这与
GET /products/1/edit
不同,不应该具有相同的URL。请参阅:
nlejzf6q2#
一切正常。我认为你混淆了
update
url和update
url。它们是相同的,但它们有不同的HTTP动词。它是show
的GET
和PATCH
的更新。当验证失败时,您处于控制器中的#update方法中,但是由于验证失败,您呈现
edit
视图。这就是代码format.html { render({:controller => :cs, :action=> :edit }) }
的作用。实际上,你可以把它转换成render :edit
。一切都在按照它应该的方式工作!