【问题标题】:How to change slug before use in friendly_id gem?在friendly_id gem中使用之前如何更改slug?
【发布时间】:2021-07-27 04:51:07
【问题描述】:

我正在尝试在友好 ID 中使用之前将 slug 转换为普通字符,但它不起作用:

class CompanyJob < ApplicationRecord
  extend FriendlyId
  
  def self.convert_slug(title)
    n = title.downcase.to_s
    n.gsub! /[àáạãâậấẫầăặắằẵ]/, "a"
    n.gsub! /[đ]/, "d"
    n.gsub! /[èéẹẽêềếệễ]/, "e"
    n.gsub! /[óòọõôốồộỗơớợỡờ]/, "o"
    n.gsub! /[úùụũưứựừữ]/, "u"
    n.gsub! /[íịìĩ]/, "i"
    n.gsub! /[ýỵỹỳ]/, "y"
    return n
  end
        
  friendly_id CompanyJob.convert_slug(:title), use: :slugged

但是,生成的 slug 是转换函数未更改的标题。 谁能帮我解决这个问题?非常感谢!

【问题讨论】:

    标签: ruby-on-rails friendly-id


    【解决方案1】:

    你有两个问题的组合:

    1. 您实际上是将符号 :title 传递给您的 .convert_slug 方法,因此 100% 的时间它只是将其转换为字符串 'title' 并返回它。
    2. friendly_id 事物的第一个参数不是 slug,它是用于获取 slug 的方法的名称(字符串或符号)。

    因此,由于#1,第一个参数始终是字符串'title',friendly_id 然后尽职尽责地调用它作为方法,结果是您的原始标题值。

    用另一种方法包装你的代码会得到你想要的:

    class CompanyJob < ApplicationRecord
      extend FriendlyId
       
      def safe_slug
        slug = title.downcase.to_s
        # ... your .gsubs
        slug
      end
        
      friendly_id :safe_slug, use: :slugged
    

    【讨论】:

      猜你喜欢
      • 2015-12-27
      • 2014-03-19
      • 2023-03-10
      • 2015-07-30
      • 2018-03-22
      • 2018-07-15
      • 1970-01-01
      • 2012-07-06
      • 2023-03-25
      相关资源
      最近更新 更多