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

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

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

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

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

目前,我只需更改genre_ids []值的每个链接,我想添加到其中,或根据需要带走。 这是我建立链接的代码……

  [genre[0].id] }) ) %> 

我认为我所追求的是类似于params.merge()但是对于params[:genre_ids]的值params[:genre_ids]

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

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

谢谢,迈克尔。

你正在覆盖你的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]) }) ) %>