首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在redirect_to中选择性地添加查询参数?

如何在redirect_to中选择性地添加查询参数?
EN

Stack Overflow用户
提问于 2022-04-18 12:50:21
回答 1查看 79关注 0票数 0

在我的应用程序中,session散列可以包含键sortratings (除了_csrf_tokensession_id),这取决于用户采取的操作。也就是说,根据用户所做的事情,它可以同时包含两者,或者两者都不包含。

现在,我希望在我的应用程序中调用redirect_to,同时恢复用户可能提供的任何会话信息(sortratings)。

为此,我希望在调用session时将当前存储的键值sortratings作为查询参数插入。因此,路径看起来可能类似于/movies?sort=...&ratings=...

我不知道该怎么写逻辑。我该怎么做?如何在调用redirect_to时有选择地插入查询参数?有可能这样做吗?

任何帮助都是非常感谢的。提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-18 13:39:12

首先,只需编写一个包含所需参数的散列-例如:

代码语言:javascript
复制
opts = session.slice(:sort, :ratings)
              .merge(params.slice(:sort, :ratings))
              .compact_blank 

此示例将包含键:sort, :ratings,其中包含与顶部合并的参数相同的键(获得优先级)。

然后,您可以将哈希传递给所需的路径助手:

代码语言:javascript
复制
redirect_to foos_path(**opts)

您可以直接传递一个后继散列选项,也可以使用params选项解释设置查询字符串:

代码语言:javascript
复制
irb(main):007:0> app.root_path(**{ sort: 'backwards' })
=> "/?sort=backwards"
irb(main):008:0> app.root_path(params: { ratings: 'XX' })
=> "/?ratings=XX"
irb(main):009:0> app.root_path(params: { })
=> "/"   

空散列将被忽略。

如果您使用哈希而不是字符串调用redirect_to,则可以使用params:键添加查询字符串参数:

代码语言:javascript
复制
redirect_to { action: :foo, params: opts }

如果您使用的是任意给定的URL/路径,并且希望操作查询字符串参数,则可以使用URI模块以及Rack和ActiveSupport提供的实用程序将查询字符串转换为散列,反之亦然:

代码语言:javascript
复制
uri = URI.parse('/foo?bar=1&baz=2&boo=3')
parsed_query = Rack::Utils.parse_nested_query(uri.query)
uri.query = parsed_query.except("baz").merge(x: 5).to_query 
puts uri.to_s # => "/foo?bar=1&boo=3&x=5"  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71912046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档