【问题标题】:Parsing multiple IDs from a URL in Rails从 Rails 中的 URL 解析多个 ID
【发布时间】:2023-03-11 00:40:01
【问题描述】:

我正在构建一个类似于 Twitter 的克隆,其中包含(以及其他)模型、Hashtag 和 Post,它们彼此之间具有 has_many: through: 关系。

目前,访问/hashtags/pizza 将带您进入一个页面,该页面显示所有带有标签#pizza 的帖子。我想添加功能,以便您可以在 URL 中传递 多个 主题标签,并查看包含 所有 这些主题标签的帖子。例如,如果您访问了/hashtags/pizza/pasta(或hashtags/?pizza&pasta' 或任何最容易实现的东西),您将看到一个页面,其中包含所有带有标签 #pizza 和标签 的帖子#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。 (上面的例子是愚蠢的,它假设总是有两个主题标签被请求,但原理是一样的。)

所以我的问题是,如何完成上面代码 sn-p 的第 2 行?

【问题讨论】:

    标签: ruby-on-rails routes hashtag


    【解决方案1】:

    您可以像对待任何其他字符串一样处理 url,因此您可以创建一个如下所示的 url:

    hashtags/?tags=pizza,pasta
    

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

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

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

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

    然后在你的控制器中:

     requested_hashtags = params[:tags]
    

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

    【讨论】:

    • 那么我会在config/routes.rb 中添加什么来匹配(比如)hashtags/?tags[]=pizza&tags[]=pasta 到正确的控制器?我会使用正则表达式吗?如何?不过谢谢!
    • 你可以只为你的表演动作设置路线。问号后面的任何内容都不需要在路由文件中指定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2023-02-04
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多