我有一个简单的模型和控制器。让我们以新西兰人为例:
codesign -d -v --entitlements - "$BINARY_PATH"
我在索引页面上使用删除链接。当我使用redirect_to' index'页面不刷新模型。我必须在页面上进行一次硬刷新才能删除Kiwi。但是,如果我使用redirect_to动作:' index'或redirect_to kiwis_path页面将在destroy动作后更新。我似乎无法找到解释。任何人都可以对这个问题有所了解。
答案 0 :(得分:3)
建议在大多数情况下使用指定的路线助手。在您的情况下,正确的做法是redirect_to kiwis_path
。
当您调用redirect_to时,Rails将以302(重定向)状态响应当前请求,然后客户端(即您的浏览器)将另一个请求发送到指定位置。重定向的位置由您传递给redirect_to
的参数确定。
当您将String
传递给redirect_to
时,必须成为一个网址(包含协议和主机,例如" http://localhost:3000/kiwis&#34 ;或者没有,例如" / kiwis")
在您的情况下redirect_to kiwis_path
是正确的。它相当于redirect_to '/kiwis'
传递哈希参数action: 'index'
时,url_for
方法用于生成URL。
redirect_to action: 'index'
与redirect_to url_for(action: 'index')
相同。 url_for(action: 'index')
将匹配路径/kiwis
的路线。
因此redirect_to action: 'index'
相当于redirect_to '/kiwis'
和redirect_to kiwis_path
Here您可以阅读redirect_to
接受的不同论点及其处理方式。
redirect_to 'index'
会怎样?我已设置测试控制器/操作以使用redirect_to 'index'
重定向。让我们看一下使用curl向它发出请求时会发生什么。
~/projects/gitlab $ curl -v -H "Accept: text/html" http://localhost:3000/redirect_test
我省略了输出中一些不相关的部分:
> GET /select_options HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.43.0
> Accept: text/html
>
< HTTP/1.1 302 Moved Temporarily
< X-Frame-Options: ALLOWALL
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< Location: http://localhost:3000index <----- That is not what we want!
您可以在显示的最后一行看到Location标头的值不是所需的URL。当我在Chrome中测试时,请求在遇到此错误重定向时被取消。因此浏览器停留在同一页面上并且没有导航。这可以解释为什么你必须做一个&#34;硬刷新&#34;查看页面上的更改。
答案 1 :(得分:0)
redirect_to 'index'
不是有效代码。
您需要为redirect_to指定完整路径。
您可能会将这与有效代码render 'index'
混淆。