ruby-on-rails 在我的控制器的更新操作中,当update_attributes由于验证器而失败时,我丢失了URL中的/edit后缀

fsi0uk1n  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(104)

描述我的工作环境: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;
        }
    }
}
xfyts7mz

xfyts7mz1#

您正在成为Rails初学者常见的问题的受害者。您的应用程序实际上运行正常,但您期望的结果是错误的。
假设你有一个名为products的资源。
在Rails中,GET /products/1/edit操作只是呈现一个表单。是idempotent action
当你提交表单时,你发送的是没有后缀的PATCH /products/1。这是因为在REST中,您使用HTTP方法来传达正在发生的事情。URL上没有后缀。
当重新呈现有错误的表单时,将显示执行非幂等操作的结果。您正在响应表单提交,并且该响应仅针对该请求。
这与GET /products/1/edit不同,不应该具有相同的URL。
请参阅:

nlejzf6q

nlejzf6q2#

一切正常。我认为你混淆了update url和update url。它们是相同的,但它们有不同的HTTP动词。它是showGETPATCH的更新。
当验证失败时,您处于控制器中的#update方法中,但是由于验证失败,您呈现edit视图。这就是代码format.html { render({:controller => :cs, :action=> :edit }) }的作用。实际上,你可以把它转换成render :edit
一切都在按照它应该的方式工作!

相关问题