从Rails中的URL解析多个ID

时间:2013-06-17 16:20:35

标签: ruby-on-rails routes hashtag

我正在建立一种Twitter克隆,包括(其中包括)模型和Hashtag和Post,它们之间有has_many: through:个关系。

目前,访问/hashtags/pizza会将您带到一个页面,该页面会显示带有主题标签 #pizza 标签的所有帖子。我想添加功能,以便您可以在URL中传递多个主题标签,并查看包含所有这些主题标签的帖子。例如,如果您访问了/hashtags/pizza/pasta(或hashtags/?pizza&pasta'或其他最容易实现的内容),则会显示一个页面,其中包含所有帖子,其中包含标签 #pizza 和hashtag #pasta

我该怎么做?我不知道从哪里开始。

为了记录,我在控制器中的想象代码将是这样的。随意戳它:

1  def show
2    requested_hashtags = ??????? # an array of hashtags e.g. ["music", "guitar"]
3    hashtag1 = Hashtag.find_by_name(requested_hashtags[0]) # in this case r_h[0] = music
4    hashtag2 = Hashtag.find_by_name(requested_hashtags[1]) # and r_h[1] = guitar
5    @posts = hashtag1.posts & hashtag2.posts
6  end

然后在我看来,我只是迭代@posts。 (上面的例子是愚蠢的,因为它假设总是要求两个主题标签,但原理是相同的。)

所以我的问题是,如何完成上面代码段的 2 行?

1 个答案:

答案 0 :(得分:0)

您可以将网址视为任何其他字符串,因此您可以创建一个网址,如:

hashtags/?tags=pizza,pasta

然后在你的控制器(第2行):

requested_hashtags = params[:tags].split(",")

Rails中另一种更常用的方法是:

hashtags/?tags[]=pizza&tags[]=pasta

然后在你的控制器中:

 requested_hashtags = params[:tags]

第二种方式是一种非常标准的Rails约定。