如何将 Rails slug URL 映射到 ID 以便在 WHERE IN 条件下使用



这是我的输入样本,它有 3 个 slug url,

["["apple-iphone"", " "blackberry"", " "htc"]"] 

如何将上述 slug 转换为id以便我可以将其用作Post.where(category_id: converted_ids)

我使用friendly_id来创建 slug url。

考虑我有两个关系

    类别
  1. (类别名称将充当 slug)。
  2. 帖子(category_id存储为参考)。

并将其视为我的网址

http://localhost:3000/apple-iphone_htc_blackberry

现在我怎样才能找到所有posts with id of apple-iphone, htc, blackberry.

这取决于您用于生成 slug 的算法。

在您的情况下,我假设您正在对类别名称或标题应用某种转换。在这种情况下,执行从 slug 到 ID 的 1 对 1 转换可能非常困难。

您有以下几种选择:

  1. 更改算法以将记录的 id 与 slug 一起嵌入

    def to_param
      "#{id}-#{name.parameterize}"
    end
    

    这是最简单的方法,因为您可以按原样将 slug 传递给查找

    Category.find("10-apple-iphone")
    

    这相当于

    Category.find("10")
    
  2. 如果您无法保留 id 或者您不想要(就像您所做的那样),那么最好的方法是将 slug 存储在类别记录本身中,并通过此类字段执行查找。

    def to_param
      slug
    end
    Category.where(slug: "apple-iphone").first
    
    当然,您需要添加迁移以创建字段,

    添加验证以确保两个记录不包含相同的字段,并确保在创建时生成 slug。

最新更新