Friendly_id 不为旧记录创建 slug

Posted

技术标签:

【中文标题】Friendly_id 不为旧记录创建 slug【英文标题】:Friendly_id not creating slugs for old records 【发布时间】:2012-09-30 06:09:36 【问题描述】:

我刚刚将 Friendly_id gem 添加到我的 rails 项目中,希望不使用数据库 ID 并创建一个 slug,但我似乎无法为旧记录创建 slug。我的模型看起来像这样。

class Mapping < ActiveRecord::Base

  extend FriendlyId
  friendly_id :title, use: :slugged

  # Friendly_Id code to only update the url for new records
  def should_generate_new_friendly_id?
    new_record? || slug.blank?
  end

end

然后我正在运行Model.find_each(&amp;:save),但它不断吐出 nil 结果。我试过完全注释掉should_generate_new_friendly_id,但没有运气。有人看到我在这里做错了吗?

编辑 我回滚了我的数据库并重写了我的迁移,这似乎已经解决了这个问题。

【问题讨论】:

您是否尝试在 should_generate_new_friendly_id? 中返回常量 true 只是为了为旧记录生成 slug? 您能澄清一下您的意思吗?我对 Rails 还是很陌生。 我的意思是用这个来重新生成不存在的 slug:def should_generate_new_friendly_id?; true; end 另外,我希望你使用 Mapping.find_each(&amp;:save) 而不是 Model.find_each(&amp;:save) 从 withn rails 控制台还是在模型中? 将模型中的代码更改为我编写的代码,并在保存更改后的模型后从控制台运行Mapping.find_each(&amp;:save) 【参考方案1】:

如果有人发现这个 6 年前的问题:

没有“做和结束”块:

find_each 返回一个 Enumerable(不是 ActiveRecord 类)

用途:

Model.find_each.select(&:save)

注意添加的“选择”方法

Doing stuff with Rails’ find_each

【讨论】:

以上是关于Friendly_id 不为旧记录创建 slug的主要内容,如果未能解决你的问题,请参考以下文章

Rails gem“friendly_id”:如何在创建对象之前获得 slug 的实时预览

使用 friendly_id 为具有可标记行为的标签创建 URL slug

rails,friendly_id,设计用户名不显示 slug

Friendly_id 和两个 slug 从根开始

导轨/Friendly_id。如何为旧的(丑陋的)URL 呈现 404 页面

Friendly_id阻止由于before_action导致的编辑/新页面:find_post