如何替换字符串中的模式

How to replace a pattern in a string

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

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

我希望每个版本都有两个 link,其中 link 到其他两个版本,因此 url 应该有不同的参数。我有一个 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")

但这对其他两个版本不起作用。

我会在 link 岁时这样做

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

这样每次加载页面时都会存在 link 到其他 2 个版本。

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

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

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