天道酬勤,学无止境

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]

评论

The 'Record' form of redirect_to uses the second argument only for the response status. You'll have to use another form of redirect_to, like the 'String' form. e.g.:

redirect_to thing_path(@thing, :foo => params[:foo])

which will work for nested params[:foo] params like you mentioned. Or, as Drew commented below, you can use polymorphic_url (or _path):

redirect_to polymorphic_path(@thing, :foo => params[:foo])

To add to Jordan's answer:

If you don't know what type of object @thing might be, you can use the universal polymorphic_url method. This is the method that is called internally when you pass in an object to redirect_to anyway.

受限制的 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>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在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')
  • 关于将实例变量传递给redirect_to方法的困惑。 如在Rails指南中所见(Confusion about passing instance variables to redirect_to method. As seen in Rails Guides)
    问题 我正在研究http://guides.rubyonrails.org/layouts_and_rendering.html上的ruby on rails指南,即“布局和渲染”主题。 我对将实例变量传递给redirect_to方法感到困惑。 这怎么可能? 我认为redirect_to与重定向到另一个网页或URL有关。 在指南中给出的示例中,它表示以下内容: 2.2.2渲染动作视图如果要渲染与同一模板中的其他操作对应的视图,则可以将render与视图名称一起使用: def update @book = Book.find(params[:id]) if @book.update_attributes(params[:book]) redirect_to(@book) else render "edit" end end 渲染“编辑”是完全有意义的,它将再次渲染该新表单。 但是,世界上redirect_to(@book)什么? 究竟要渲染什么,以及如何将书本对象重定向到? 顺便说一句,书籍模型具有列,名称,作者,页面等。 回答1 redirect_to文档 redirect_to(options = {},response_status = {})将浏览器重定向到options中指定的目标。 记录-通过使用选项调用url_for来生成URL,该选项将引用该记录的命名URL。 因此
  • Confusion about passing instance variables to redirect_to method. As seen in Rails Guides
    I am studying the ruby on rails guides namely, the "layouts and rendering" topic at http://guides.rubyonrails.org/layouts_and_rendering.html I am confused about passing an instance variable to a redirect_to method. How is this possible? I thought redirect_to would be relevant for redirecting to another webpage or a url. In the examples given on the guide it says the following: 2.2.2 Rendering an Action’s View If you want to render the view that corresponds to a different action within the same template, you can use render with the name of the view: def update @book = Book.find(params[:id]) if
  • 如何在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'])的捷径
  • 将querystring参数添加到link_to(Add querystring parameters to link_to)
    问题 我很难将querystring参数添加到link_to UrlHelper。 例如,我有一个Index视图,其中包含用于排序,过滤和分页(通过will_paginate)的UI元素。 will_paginate插件可以正确管理querystring参数的页内持久性。 是否有一种自动机制可以将querystring参数添加到给定的命名路由中,还是我需要手动进行? 对这个看似简单的结构的大量研究使我毫无头绪。 编辑 一些挑战: 如果我有两个querystring参数,bucket和sorting,如何在link_to中为其中一个设置特定的值,同时保留另一个的当前值? 例如: <%= link_to "0", profiles_path(:bucket => '0', :sorting=>?? ) %> 如果我有多个querystring参数,bucket&sorting和page_size,并且要将值设置为其中之一,是否可以“自动”包括其余参数的名称和值? 例如: <%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here] ) %> will_paginate插件自动管理其页面变量和其他querystring变量。
  • fullcalendar passing js vars to rails and vice versa
    I have a rails app. I'm trying to integrate the fullcalendar into my app. For testing I created manually an event which shows up in the calendar after sending over with as_json to the browser. When I try to move (update) the event the js works but I can't save it to the db thanks to routing problems. In the code below I have it hard coded, so it works this way. If I use in the AJAX: url: the_event.recipientId + "/events/" + the_event.id then the console tells me: Started POST "/users/1/1/events/1" --> no route matches. If I use url: "/events/" + the_event.id then started POST "/events/1" -->
  • fullcalendar将js vars传递到rails,反之亦然(fullcalendar passing js vars to rails and vice versa)
    问题 我有一个Rails应用程序。 我正在尝试将全日历集成到我的应用程序中。 为了进行测试,我手动创建了一个事件,该事件在将as_json发送到浏览器后显示在日历中。 当我尝试移动(更新)事件时,js起作用了,但是由于路由问题,我无法将其保存到数据库中。 在下面的代码中,我对其进行了硬编码,因此它可以通过这种方式工作。 如果我在AJAX中使用: url: the_event.recipientId + "/events/" + the_event.id那么控制台会告诉我:启动POST“ / users / 1/1 / events / 1”->没有路由匹配。 如果我使用url: "/events/" + the_event.id然后启动POST“ / events / 1”->没有路由匹配。 所以现在我使用的是从event.rb发送过来的event.url,但是它是硬编码的。 如何在AJAX POST中为此current_user设置匹配的url(为此,我还需要从数据库中找到收件人(用户))和PUT调用? 对于PUT(更新)接收者和发送者已经定义,因此使用as_json方法将数据发送到浏览器。 在这里,我的问题是在模型(event.rb)中判断current_user是发送方还是接收方,并在不进行任何硬编码的情况下设置url。 对于POST,要困难得多。
  • How do I stop controller execution after using redirect_to? (Using Rails)
    I have a controller with multiple actions that take :year and :month as attributes from the URL. I have made a private method check_date to check the date is valid and check the date is not in the future. def check_date(year, month) if month < 1 || month > 12 || year < 2000 flash[:notice] = I18n.t 'archive.invalid_date' redirect_to :action => 'index' elsif year > Date.today.year || (year == Date.today.year && month > Date.today.month) flash[:notice] = I18n.t 'archive.no_future' redirect_to :action => 'month_index', :year => Date.today.year, :month => Date.today.month, :type => params[:type]
  • 为什么当我尝试user.save时,我的rails会回滚?(Why does my rails rollback when I try to user.save?)
    问题 我已经安装了RailsTutorial示例应用程序(类似Twitter的应用程序),并试图理解为什么当我尝试更新用户db时以下控制台代码无法更新数据库。 我希望一旦使用user.save ,用户信息就会得到更新。 但是,这回滚到未编辑的数据。 这是由于基于用户的限制吗? 用户控制器: class UsersController < ApplicationController #before_filter :signed_in_user, only: [:index, :edit, :update, :destroy, :following, :followers] # By default before filters apply to all actions #before_filter :correct_user, only: [:edit, :update] def edit @user = User.find(params[:id]) end def update @user = User.find params[:id] respond_to do |format| if @user.update_attributes(params[:user]) flash[:notice] = "Profile updated" format.html { redirect
  • Passing parameters in rails redirect_to
    How do we pass parameters in redirect_to in rails? I know we can pass id using this: redirect_to :action => action_name,:id => 3 If I want to pass additional parameters like some form data how to achieve it? EDIT: For Ruby 2 syntax you have to update the snippet above to: redirect_to action: action_name, id: 3
  • 如何在查询字符串中传递数组?(How to pass an array within a query string?)
    问题 是否存在通过查询字符串传递数组的标准方法? 需要明确的是,我有一个带有多个值的查询字符串,其中一个是数组值。 我希望将该查询字符串值视为一个数组-我不希望该数组爆炸,以使其与其他查询字符串变量没有区别。 另外,根据该帖子的答案,作者建议未定义对数组的查询字符串支持。 这是正确的吗? 编辑: 基于@Alex的答案,没有标准的方法可以执行此操作,因此,我的后续工作是一种什么简单的方法来识别我正在读取的参数是PHP和Javascript中的数组? 以相同的名称命名多个参数是否可以接受,这样我就知道它们属于数组? 例子: ?myarray=value1&myarray=value2&myarray=value3... 还是这是不好的做法? 回答1 这是我想出的: 提交多值表单字段(即通过GET / POST变量提交数组)可以用几种不同的方式完成,因为不一定要阐明标准。 发送多值字段或数组的三种可能方法是: ?cars[]=Saab&cars[]=Audi (最佳方法-PHP将其读入数组) ?cars=Saab&cars=Audi (坏方法-PHP仅注册最后一个值) ?cars=Saab,Audi (还没试过) 表格范例 在表单上,​​多值字段可以采用将选择框设置为多个的形式: <form> <select multiple="multiple" name="cars[]">
  • 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方法的作用完全不同
  • redirect_to在Rails中使用POST(redirect_to using POST in rails)
    问题 是否可以使用POST方法重定向? 还是应该始终使用GET进行重定向? 在电子商务网站的订购过程的最后步骤中使用此方法,以将数据发送到付款处理器,而无需为用户引入额外的步骤。 回答1 POST请求无法进行重定向-它是HTTP / 1.1协议的一部分。 您可以引入包含要过帐到付款处理器的表单数据的另一步骤,或者可以从您的应用程序发送过帐(我在使用PROTX时已经做过)。 回答2 我通过显示包含所有产品和运费等的摘要页面来解决此问题,通常使用“确认并支付您的购买,单击下面的继续按钮”类型的消息。 继续按钮使站点将产品数据和所有内容过帐到付款处理器。 简短的回答-没有为用户的又一步骤。 但是,关键是要使其看起来自然且尽可能地成为结帐体验的一部分。 这样,它不会像“只是另一步骤”那样遇到太多。 但是,如果你遇到一个更好的办法,我会很感兴趣地听到它是什么:) 回答3 使用简单的javascript行,您可以使用POST表单自行发布( form.submit() )。 然后,您可以隐藏表单,并在表单提交给付款处理器时向用户显示一条简单的“请稍等...”消息。 回答4 这个想法是在引擎盖下使用:post生成表单时进行“重定向”。 我遇到了同样的问题,并将解决方案提取到gem repost ,因此它可以为您完成所有工作,因此无需使用表单创建单独的视图
  • pass array hidden field in nested model rails
    I have following code in my view: <% @m1.map(&:id).each do |id|%> <%= b.fields_for :modul1hours do |f| %> <%= f.hidden_field :modul1_id, id %> <%= f.text_field :module_est_hours, :size => 30 %> </tr> <% end %> <%end%> params passing in console Parameters: {"authenticity_token"=>"LJ/ZME2lHZ7VwCDgPKX6OFe326fXSXo5UB4M0cPwbCE=", "esthour"=>{"rfp_id"=>"6", "ecommerce_est_hours"=>"", "modul1hours"=>{"module_est_hours"=>"3"}, "designpages_est_hours"=>"", "cms_est_hours"=>""}, "modul1_ids"=>["12", "13", "14"], "utf8"=>"✓", "project_id"=>"second", "commit"=>"Add Todo"} Current user: admin (id=1) modul1
  • Rails-如何销毁在设计下创建的用户?(Rails - How To Destroy Users Created Under Devise?)
    问题 对于我的应用程序,我有一些用户可以注册的用户帐户。 我使用devise gem进行设置。 我还有一个用户页面,其中列出了所有注册到该站点的用户以及destroy链接。 我希望管理员能够删除用户并将其重定向到此用户列表页面。 但是,当我单击链接以销毁特定用户时,它只会重定向到用户配置文件页面,而不会从数据库中删除该用户。 有人知道为什么吗? **更新:根据建议,更新了以下代码,现在可以使用。 users_controller.rb def destroy @user = User.find(params[:id]) @user.destroy if @user.destroy redirect_to root_url, notice: "User deleted." end end users / index.html.erb <div class = "container"> <div id="usersview"> <b>USERS DIRECTORY</b> <%= render @users %> </div> <center> <%= will_paginate @users %> </center> </div> users / _user.html.erb <div class="comments"> <%= link_to user.name, user %>
  • rails redirect_to格式html在js中发送响应(rails redirect_to format html sends response in js)
    问题 我在某些控制器中创建了一个before_filter,以将关键字搜索重定向到父控制器 这很简单: before_filter :redirect_search def redirect_search redirect_to controller: "buildings", action: "index", format: "html" if params[:q].present? end 请注意,keyword_search以“ js”格式发送 一切似乎都正常。 当我查看服务器时,可以看到建筑物/索引已运行并且页面已呈现,但浏览器中没有任何反应。 在浏览器的控制台中,我看到了 GET http://localhost:3000/buildings.html 200 OK 它在响应正文中有html页面 这意味着building / index以html的形式运行,然后以js的形式发送到浏览器。 为什么会这样? 我该如何解决? 回答1 尝试一下 def redirect_search respond_to do |format| format.html {redirect_to buildings_path} if params[:q].present? format.js {render :js => "window.location.href='"+buildings
  • Ruby on Rails-存储应用程序配置(Ruby on Rails - Storing application configuration)
    问题 我有一个相对简单的Rails应用程序,我想存储管理员可以在应用程序运行时更改的各种配置设置,例如,允许对帖子发表评论或更改日期的显示格式。 我知道我可以将常量等存储在environment.rb文件中,但是这些常量似乎仅在服务器重新启动时才加载。 有没有其他地方可以定义此信息,还是将其保存在数据库中会更好? 任何建议表示赞赏。 谢谢。 回答1 您可以使用数据库。 创建一个单独的表“设置”,用于存储所需的键/值参数。 该解决方案的缺点是性能下降(每次需要设置时都会查询数据库)。 要解决此问题,您可以通过“ cache_money”之类的缓存进行读/写操作,也可以使用“ Rails.cache”创建自己的缓存 回答2 您可以使用rails-settings-cached的gem,它是rails-settings宝石的一个分支(在另一个答案中,由Yi-Ru Lin链接)。 设置完成后,您将可以执行以下操作: Setting.foo = 123 Setting.foo # returns 123 您还可以管理模型上的设置,例如: user.settings.color = :red user.settings.color # returns :red 回答3 尝试查看它可能是您所需要的。 http://github.com/ledermann/rails-settings 回答4
  • Rails链接到当前页面并向其传递参数(Rails link to current page and passing parameters to it)
    问题 我通过使用url参数传递语言环境来将I18N添加到我的rails应用程序中。 我的网址看起来像http://example.com/en/users和http://example.com/ar/users(分别用于英语和阿拉伯语区域设置)。 在我的路由文件中,我使用:path_prefix选项定义了路由: map.resources :users, :path_prefix => '/:locale' 并使用ApplicationController中定义的before_filter设置语言环境 def set_locale I18n.locale = params[:locale] end 我还定义了ApplicationController#default_url_options,以将区域设置添加到应用程序生成的所有url中: def default_url_options(options={}) {:locale => I18n.locale} end 我想要的是在布局标题(在所有页面中显示)中添加一个链接,该链接将链接到同一页面,但使用其他语言环境。 例如,如果我正在浏览阿拉伯语的语言环境,则我希望在标题中添加一个“英语”链接,该链接会将我重定向回当前页面,并将语言环境设置为英语。 有办法做到这一点吗? 回答1 花了我一段时间才能找到这个,但这是我的解决方案:
  • 在ajax调用后,Rails不显示flash消息(Rails doesn't display flash messages after ajax call)
    问题 我正在编写Rails 4.0.2应用程序,并试图在AJAX事件发生后在我的视图中显示Flash通知。 在我看来,我会显示一个日历,其中包含用户可以点击的天数。 当他们这样做时,我会通过onclick事件处理程序触发AJAX事件,该事件处理程序会更新我的模型(添加或删除记录)。 触发事件后,我将完成页面刷新以显示更新的结果。 我发现我必须在JS click事件期间进行页面刷新,以使视图正确更新。 仅在控制器中进行重定向或渲染是不够的。 因此,为此,我在控制器中设置了Flash通知... def set_conflicts @conflict = @member.conflicts.for_date(params[:date]).first if @conflict @conflict.destroy else conflict_date = Date.parse(params[:date]) unless Conflict.create( month: conflict_date.month, day: conflict_date.day, year: conflict_date.year, member: @member ) flash[:alert] = 'Oops, there was a problem updating conflicts' end end flash
  • 在ajax调用后,Rails不显示flash消息(Rails doesn't display flash messages after ajax call)
    问题 我正在编写Rails 4.0.2应用程序,并试图在AJAX事件发生后在我的视图中显示Flash通知。 在我看来,我会显示一个日历,其中包含用户可以点击的天数。 当他们这样做时,我会通过onclick事件处理程序触发AJAX事件,该事件处理程序会更新我的模型(添加或删除记录)。 触发事件后,我将完成页面刷新以显示更新的结果。 我发现我必须在JS click事件期间进行页面刷新,以使视图正确更新。 仅在控制器中进行重定向或渲染是不够的。 因此,为此,我在控制器中设置了Flash通知... def set_conflicts @conflict = @member.conflicts.for_date(params[:date]).first if @conflict @conflict.destroy else conflict_date = Date.parse(params[:date]) unless Conflict.create( month: conflict_date.month, day: conflict_date.day, year: conflict_date.year, member: @member ) flash[:alert] = 'Oops, there was a problem updating conflicts' end end flash