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(&: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(&:save)
而不是 Model.find_each(&:save)
。
从 withn rails 控制台还是在模型中?
将模型中的代码更改为我编写的代码,并在保存更改后的模型后从控制台运行Mapping.find_each(&: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