【问题标题】:how to map rails slug url to id for using in where in condition如何将 rails slug url 映射到 id 以便在条件下使用
【发布时间】:2014-01-15 23:49:32
【问题描述】:

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

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

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

我使用 friendly_id 创建 slug url。

考虑我有两个关系

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

并将其视为我的网址

http://localhost:3000/apple-iphone_htc_blackberry

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

    您有多种选择:

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

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

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

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

      相当于

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

      def to_param
        slug
      end
      
      Category.where(slug: "apple-iphone").first
      

      当然,您需要添加迁移以创建字段,添加验证以确保两条记录不包含相同的字段,并确保在创建时生成 slug。

    【讨论】:

    • 我已经编辑了我的问题以获得更详细的解释。你能检查一下吗
    • 问题是一样的。除非您将这些值保存在数据库中,否则您无法轻松查询它们,因为您无法将 slug 反转为原始标题或 id。您使用的 friendly_id 函数是单向的,您无法从 slug 中获取记录,因为该函数不是 surjective (实现它的唯一方法是将 slug 也存储在类别模型中)。
    • 谢谢你的建议,那就照你说的改吧
    猜你喜欢
    • 1970-01-01
    • 2016-06-24
    • 2021-03-19
    • 2020-04-24
    • 2022-08-03
    • 2015-09-29
    • 2013-12-29
    • 2014-10-23
    • 1970-01-01
    相关资源
    最近更新 更多