【问题标题】:How to replace a pattern in a string如何替换字符串中的模式
【发布时间】:2015-03-12 16:36:27
【问题描述】:

我构建了一个根据params 呈现不同的页面。逻辑是这样的:

<% if params[:x] == "1" %>
  <!--render version A-->
<% elsif params[:x] == "2" %>
  <!--render version B-->
<% elsif params[:x] == "3" %>
  <!--render version C-->
<% end %>

我希望每个版本都有两个链接到其他两个版本,所以网址应该有不同的参数。我有一个url字符串original_url,即:

"localhost:3000/page?x=1"

并希望根据params 替换其参数。其他两个版本应该是:

"localhost:3000/page?x=2"
"localhost:3000/page?x=3"

如何从original_url 中消除模式?x=[number] 并将其替换为其他内容?

对于版本 1,我可以这样做

request.original_url.sub("?x=1", "?x=2")

然后

request.original_url.sub("?x=1", "?x=3")

但是那在其他两个版本上就行不通了。

【问题讨论】:

  • 为什么需要更换这个?请解释您的用例,因为您显然可以使用 request.original_url.gsub(/\?x=./,'?x=YOUR_NUMBER_HERE')
  • @engineersmnky 我将其包含在原始问题中,但有人出于某种原因将其编辑了...我将其添加回来。

标签: ruby-on-rails ruby regex string erb


【解决方案1】:

我会为链接这样做

<%= ([1,2,3]- [params[:x]]).each do |link_number| %>
   <%= link_to "Version #{link_number}", "/page?x=#{link_number}" %>
<% end %>

这样每次加载页面时,其他两个版本的链接都会存在。

你可以通过控制器来处理部分(看起来更好)或使用类似的东西:

<%= render "version_#{['A','B','C'][params[:x] - 1]}" %>

如果对问题没有更好的理解,我将无法提供超出这一点的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2020-07-04
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多