gpt4 book ai didi

ruby-on-rails - Rails 4 - 为什么我不能在保存后重定向?

转载 作者:行者123 更新时间:2023-12-04 07:29:24 25 4
gpt4 key购买 nike

我正在上传几张图片(来自 http://localhost:3000/choices/new),效果很好,但是,我正在尝试重定向回:http://localhost:3000/choices 保存后。

这是我的 Controller :

#app/controllers/choices_controller.rb
def create
@choice = Choice.new(choice_params)
@choice.filename = params[:filename].titleize
if @choice.save
respond_to do |format|
format.html { redirect_to choices_path }
format.json { head :no_content }
end
end
end

在 Rails 控制台中,它输出:

 Redirected to http://localhost:3000/choices
Completed 302 Found in 58ms (ActiveRecord: 52.8ms)

然而,"new"页面仍然是静态的。关于如何正确重定向这个的任何想法,也许是一条闪现消息说“图片上传成功”?

非常感谢!

最佳答案

我才刚刚了解什么是异步请求,所以我希望这对您有所帮助...

如果您使用 JS 发送“后台”请求, Controller 如何影响浏览器的视口(viewport)?

Controller 是服务器端,每次发送请求时都会加载。这意味着除非您的实际浏览器直接向 Controller 发出 HTTP 请求,否则它怎么会导致您已经呈现的 View 发生变化?

JS 是客户端技术,这意味着它可以代表您使事情发生,但它的范围仅限于获取“DOM”元素和交互跟他们。

我在这方面查看了一些非常有用的答案,并发现了这些想法:

所有这些答案都说了类似的话:你需要用 JS 处理重定向

为什么不做这样的事情:

#app/controllers/choices_controller.rb
def create
@choice = Choice.new(choice_params)
@choice.filename = params[:filename].titleize
if @choice.save
respond_to do |format|
format.html { redirect_to choices_path }
format.json { render :json => {
:location => url_for(:controller => 'choices', :action => 'index'),
:flash => {:notice => "File Uploaded!"}
}
end
end
end

#assets/javascripts
$(document).ready(function() {
$.ajax({
success: function(data) {
window.location = data.location
}
})
});

一个更简洁的方法是发送一个普通的 JS 请求,然后:

#/views/new.js.erb
window.location = <%= choices_path %>


#app/controllers/choices_controller.rb
def create
@choice = Choice.new(choice_params)
@choice.filename = params[:filename].titleize
if @choice.save
respond_to do |format|
format.html { redirect_to choices_path }
format.js
end
end
end

关于ruby-on-rails - Rails 4 - 为什么我不能在保存后重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com