Rails - 如何在URL中“合并”或附加值到数组?

时间:2014-02-17 15:31:08

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试在URL中传递数组,这工作正常,但我想知道如何插入或删除某些值?

例如,我有一个看起来像这样的链接:

http://localhost:3000/pins?genre_ids[]=1,2,3

我想构建一组可以在此URL数组中插入或删除数字的链接。

目前,我所拥有的每个链接都只是完全改变了genre_ids []值,我想添加它,或者根据需要带走。这是我建立链接的代码......

<%= link_to genre[0].title, pins_path( params.merge({ :genre_ids => [genre[0].id] }) ) %>

我认为我所追求的是params.merge(),但是params[:genre_ids]的价值

我希望你能明白我的意思吗?如果当前URL读取/pins?genre_ids[]=1,2,3我想要它,以便我构建的每个链接都包含此当前链接,并在此数组中添加另一个数字,以使其看起来像/pins?genre_ids[]=1,2,3,4

非常感谢任何帮助。我来自CF背景,所以我仍然试图了解Ruby和Rails。我在Ruby 2中使用Rails 4。

谢谢, 迈克尔。

1 个答案:

答案 0 :(得分:22)

您正在覆盖genre_ids阵列。您需要组合使用+运算符可以执行的两个数组:

params[:genre_ids] + [genre[0].id]

我认为这会解决问题:

<%= link_to genre[0].title, pins_path( params.merge({ :genre_ids => (params[:genre_ids] + [genre[0].id]) }) ) %>

但是,应该注意的是,最终可能会出现重复的数组对象值。您可能需要考虑使用“union”运算符|

示例:

first = [1,2,3,4]
second = [3,4,5,6]
first + second #=> [1, 2, 3, 4, 3, 4, 5, 6]
first | second #=> [1, 2, 3, 4, 5, 6]

所以也许你的链接应该是:

<%= link_to genre[0].title, pins_path( params.merge({ :genre_ids => (params[:genre_ids] | [genre[0].id]) }) ) %>