如何替换字符串中的模式

时间:2015-03-12 16:36:28

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

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

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

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

"localhost:3000/page?x=1"

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

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

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

对于版本1,我可以

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

然后

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

但是那不会对其他两个版本起作用。

1 个答案:

答案 0 :(得分:-1)

我会为链接

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

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

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

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

如果没有更好地理解这个问题,我无法超越这一点。