天道酬勤,学无止境

rails redirect_to :back not working

问题

我正在尝试使用以下内容:

class PaymentsController < ApplicationController

  def addproduct
     (session[:products] ||= []) << params[:item]
     redirect_to :back
  end

 end

我得到了这个例外:

undefined method `back_url' for #<PaymentsController:0x007ff682c467a8>

为什么会这样?

回答1

Rails 5 有 redirect_back,而不是redirect_to :back 。 它已更改,因为它用于在请求的HTTP_REFERER不存在时引发异常。

所以使用这个:

redirect_back fallback_location: root_path

您可以根据需要将root_path更改为其他内容。

回答2

redirect_to :back在 Rails 5.0 中被弃用(参见 PR),然后在 Rails 5.1 中被删除

请改用以下内容:

redirect_back(fallback_location: root_path)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在Ruby On Rails中重定向到上一页?(How to redirect to previous page in Ruby On Rails?)
    问题 我有一个页面,列出了所有具有可排序标题和分页的项目。 path: /projects?order=asc&page=3&sort=code 我选择编辑其中一个项目 path: projects/436/edit 当我单击该页面上的“保存”时,它将调用项目控制器/更新方法。 更新代码后,我想重定向到单击编辑特定项目之前的路径。 换句话说,我想在同一页面上进行相同的排序。 我看到了link_to(:back)并认为:back可以在redirect_to(:back)中工作,但这是不行的。 puts YAML::dump(:back) yields the following: :back 关于如何使它起作用的任何想法。 看来这个问题很容易解决,但是我对RoR还是陌生的。 回答1 在您的编辑操作中,将请求的URL存储在会话哈希中,该URL可在多个请求中使用: session[:return_to] ||= request.referer 保存成功后,然后在更新操作中重定向到它: redirect_to session.delete(:return_to) 回答2 为什么redirect_to(:back)对您不起作用,为什么不行? redirect_to(:back)对我来说就像一种魅力。 这只是redirect_to(request.env['HTTP_REFERER'])的捷径
  • rails redirect_to :back not working
    I'm trying to use the following: class PaymentsController < ApplicationController def addproduct (session[:products] ||= []) << params[:item] redirect_to :back end end I got this exception: undefined method `back_url' for #<PaymentsController:0x007ff682c467a8> Why this is happening?
  • 如何将锚添加到redirect_to:back(How to add an anchor to redirect_to :back)
    问题 我有一个博客应用程序,该应用程序的帖子可以通过posts控制器中的vote动作来接收投票。 因为我允许在索引视图和显示视图中都进行投票,所以在进行投票后,我redirect_to :back如下所示。 def vote # voting logic goes here redirect_to :back end 这会将我重定向到正确的页面,但是我想重定向到页面内的特定帖子。 为此,我在帖子的div部分中添加了一个识别锚。 <div id="post_<%= post.id %>"> <%= post.content %> </div> 如何在我的redirect_to :back引用它? 我尝试了以下操作,但这不起作用。 # this doesn't work! redirect_to :back, anchor: "post_#{@post.id}" 或者,如果要对显示视图和索引视图使用if子句,该怎么做? 我尝试了以下undefined method 'current_page' for VocabsController ,该undefined method 'current_page' for VocabsController返回undefined method 'current_page' for VocabsController 。 #this doesn't
  • 双渲染错误导轨(Double render error rails)
    问题 不知道怎么可能出现此错误: AbstractController::DoubleRenderError users#create 当在我的控制器中时,我得到以下代码: render 'new' and return 我从bugsnag得到了日志,说我在这一行得到了错误。 这是创建方法的代码: def create back_button and return if params[:back_button] @profile = current_user.build_profile(params[:user]) if @profile.nil? || current_user.nil? || @profile.user.nil? sign_out redirect_to signup_path and return end if @profile.new_record? render 'new' and return else redirect_to more_questions_path and return end end 我在此控制器之前有过滤器: before_filter :signed_in_user def signed_in_user unless signed_in? store_location redirect_to signin_url, notice
  • 为什么三元运算符不能与重定向一起使用(Why won't ternary operator work with redirect)
    问题 我喜欢三元运算符。 它确实清理了代码外观,但我有一个案例,它在 Rails 控制器中无法正常运行。 我收到一个语法错误: unexpected tSYMBEG, expecting keyword_do or '{' or '(' 我一直遇到这个问题,它点亮了将下面的语句更改为三元运算符的开关。 当我尝试将它与重定向语句结合使用时,它总是会发生。 我不知道有关此的规则吗? if nexti==0 then redirect_to :back else redirect_to edit_playt_path(id: actform['playt_id'], i: nexti) end nexti==0 ? redirect_to :back : redirect_to edit_playt_path(id: actform['playt_id'], i: nexti) 回答1 由于散列的隐含性质 Ruby / Rails 将暗示您重定向的参数是一个散列,这在您的示例中具有一些尴尬的含义 当 ruby​​ 暗示要重定向的参数时,它会将其视为以下场景中的散列,它将其解析为 nexti==0 ? redirect_to({:back, : redirect_to edit_playt_path(id: actform['playt_id'], i: nexti}) 这是无效的
  • Correctly doing redirect_to :back in Ruby on Rails when referrer is not available
    I'm having a problem with redirect_to :back. Yes, it's referrers. I often get the exception (ActionController::RedirectBackError) "No HTTP_REFERER was set in the request to this action, so redirect_to :back could not be called successfully. If this is a test, make sure to specify request.env[\"HTTP_REFERER\"]." I realize that this is a result of a referrer not being available. Is there a way that, for example, one can set a session variable on each access with the last page visited, and, when HTTP_REFERER is not available, utilize this session variable to redirect to?
  • link_to,redirect_to和render之间有什么区别?(what is the difference between link_to, redirect_to, and render?)
    问题 我对link_to , redirect_to和Rails中的render之间的主要区别感到困惑。 任何人都可以解释。 回答1 link_to用于您的视图,并为链接生成html代码 <%= link_to "Google", "http://google.com" %> 这将在您的视图中生成以下html <a href="http://google.com">Google</a> redirect_to和render在您的控制器中用于回复请求。 redirect_to只会将请求重定向到新的URL,如果在您的控制器中添加 redirect_to "http://google.com" 访问您页面的任何人都将有效地重定向到Google render可以多种方式使用,但主要用于呈现html视图。 render "article/show" 这将呈现视图“ app / views / article / show.html.erb” 以下链接将更详细地说明redirect_to和render方法http://guides.rubyonrails.org/layouts_and_rendering.html 回答2 从文档中: 关于渲染视图与重定向请求 。 。 。 render告诉Rails在构造响应时使用哪个视图(或其他资产)。 redirect_to方法的作用完全不同
  • 如何立即反映 URL 中语言环境的变化?(How to reflect change of locale in URL instantly?)
    问题
  • rails 4 使用新参数重定向回来(rails 4 redirect back with new params)
    问题 是否可以使用查询字符串中的新参数重定向回引用 url? 像这样: redirect_to :back, custom_param='foo' 回答1 试试这个: # get a URI object for referring url referrer_url = URI.parse(request.referrer) rescue URI.parse(some_default_url) # need to have a default in case referrer is not given # append the query string to the referrer url referrer_url.query = Rack::Utils.parse_nested_query(referrer_url.query). # referrer_url.query returns the existing query string => "f=b" # Rack::Utils.parse_nested_query converts query string to hash => {f: "b"} merge({cp: 'foo'}). # merge appends or overwrites the new parameter => {f: "b", cp: :foo
  • 使用redirect_to 时缺少模板?(Template is missing when using redirect_to?)
    问题
  • Rails 活动破坏记录不起作用(Rails activity destroy record not working)
    问题
  • 如何重定向到并返回 200 状态代码(how to redirect_to and return a 200 status code)
    问题 我有一个 rails 应用程序,当用户填写表单时,它会用新的信用卡 ping 条纹。 然后它在完成后重定向回主页。 但是,stripe 说我返回的是 503(我认为这是代码)而不是 200。我正在执行常规的 redirect_to :root。 我如何确保也返回 200 代码? 回答1 恐怕你不能。 导轨方法 redirect_to some_path 通过向浏览器发送带有 302 状态代码和 URL 目标(作为 HTTP 响应标头)的 HTTP 响应来工作。 浏览器收到响应后,会自动向新 URL 发起新的 HTTP 请求。 Rails中不会发生重定向。 很多人认为redirect_to是一种从控制器的动作跳转到另一个的方法,但它实际上只是要求浏览器发送另一个请求。 现在,浏览器知道如何处理这种响应,因为302是一个 HTTP 状态代码。 这就是它的意义。 您可以将redirect_to的状态代码更改为200 ,但这会破坏重定向。 回答2 重定向到:root,状态::ok
  • rails - 除非上一页是艺术家页面,否则重定向回来(rails - redirect back unless previous page was artist page)
    问题 我想重定向回上一页,除非上一页是我的“艺术家”控制器的“显示”操作。 所以我想它看起来像: if *previous page was artist show* redirect_to [track.artist, track] else redirect_to :back end 我的问题是 - 我如何测试上一页是否是我的艺术家控制器的表演动作..? 回答1 也许request.referer是你要找的? 然后你可以这样说: if request.referer == artist_url(track.artist) redirect_to [track.artist, track] else redirect_to :back end
  • Rails:将两个页面重定向回来(Rails: redirect two pages back)
    问题 我正在努力解决这个问题: 假设您有两个模型: :bar has_many :foos 你有一个这样的网址:http://myapp.com/24-name-of-the-bar-to-param/foos/new 在我的网站上,此页面显示了有关用户将为其创建 foo 的 bar 的大量信息。 因此,即使用户没有登录,用户仍然可以看到信息。 目前,当用户登录时,用于创建新 foo 的表单位于网页的左侧。 当用户未登录时,它会显示“请登录或注册” 该表单详细说明了我的应用程序的工作原理,因此我想对其进行更改,以便即使用户未登录表单也会显示,并且如果他们单击提交,它将带他们到 login_path 然后何时他们登录,回到提交表单的路径。 我遇到了这个问题:目前我的应用程序控制器中有一个 login_required 方法,如下所示: def store_location session[:return_to] = request.request_uri end def login_required unless current_user || admin? store_location flash[:notice] = "Please log in" redirect_to login_path and return false end end 在 foo
  • Rails - 行为怪异的表单:不保存任何 text_field(Rails - Forms acting Weird: not saving any text_field)
    问题
  • 在rails redirect_to中传递参数(Passing parameters in rails redirect_to)
    问题 我们如何在rails的redirect_to中传递参数? 我知道我们可以使用以下方式传递ID: redirect_to :action => action_name,:id => 3 如果我想传递诸如某些表单数据之类的附加参数,该如何实现呢? 编辑: 对于Ruby 2语法,您必须将上面的代码段更新为: redirect_to action: action_name, id: 3 回答1 只需将它们附加到选项: redirect_to controller: 'thing', action: 'edit', id: 3, something: 'else' 是否会产生/thing/3/edit?something=else 回答2 如果您使用的是RESTful资源,则可以执行以下操作: redirect_to action_name_resource_path(resource_object, param_1: 'value_1', param_2: 'value_2') or #You can also use the object_id instead of the object redirect_to action_name_resource_path(resource_object_id, param_1: 'value_1', param_2: 'value_2')
  • Passing param values to redirect_to as querystring in rails
    This should be simple, but I can't seem to find an easy answer. How can I pass param values from the current request into a redirect_to call? I have some form values I'd like to pass into the query string of a GET redirect I'd like to do something like: redirect_to @thing, :foo => params[:foo] and get sent to: http://things/4?[foo][key1]=val1&[foo][key2]=val2 Thanks! Also - how could this be handled for a redirect_to :back? redirect_to :back, :foo => params[:foo]
  • Rails 5.2 Active Storage 清除/删除附件(Rails 5.2 Active Storage purging/deleting attachments)
    问题 所以我使用 Active Storage 上传附加到 Collection 模型的多个图像。 一切正常,除非我试图从集合中清除/删除单个附件。 问题:出于某种原因,每当我加载集合的显示页面时,我的所有图像都会立即被清除/删除。 当然,我只想在单击链接时删除文件。 有谁知道如何解决这个问题? 我的收藏展示视图: <div id="gallery"> <% @collection.images.each do |image| %> <%= image_tag(image) %> <%= link_to 'Remove image', image.purge %> <% end %> </div> 我已阅读有关 http://edgeguides.rubyonrails.org/active_storage_overview.html#removing-files 的文档(参见第 4 段) 但遗憾的是,这并没有提供有关如何专门使用 purge 或 purge_later 方法的任何信息。 编辑目前将我的代码更改为此(遗憾的是仍然不起作用): <div id="gallery"> <% @collection.images.each do |image| %> <%= image_tag(image) %> <%= link_to 'Remove', delete_image
  • Rails: redirect two pages back
    I'm trying to get my head around this one: Say you have two models where: :bar has_many :foos And you have a url like this: http://myapp.com/24-name-of-the-bar-to-param/foos/new On my site this page shows a lot of information about the bar which users are going to create a foo for. So, even if a user isn't logged in the user will still be able to see the info. Currently, when the user is logged in, a form to create a new foo is on the left hand side of the web page. When the user isn't logged in it says "Please login or register" The form explains a lot about how my app works, so I'd like to
  • Can't create new record via form in Rails 5 app
    This form was working perfectly but I've not used it for a little while and I'm sure I've introduced an error somewhere, but I can't track what it might be. I have two other similar forms that submit to the same postgres db as expected. I can edit an existing record ok, so looks like it is just the new/create method I'm having problems with. The log doesn't actually show any error, it just redirects back to the new view: Processing by CoffeeshopsController#new as HTML Rendering coffeeshops/new.html.erb within layouts/application Rendered users/shared/_links.html.erb (1.4ms) [cache miss]