Pin local-time后无法在time_tag中显示相对时间的技术求助
嘿,我明白你对照教程反复检查却没解决问题的挫败感——别担心,咱们一步步来搞定这个Local-Time相对时间不生效的问题:
解决Local-Time相对时间不显示的问题
你已经通过./bin/importmap pin local-time完成了包的注册,但这只是第一步,Local-Time还需要被导入并初始化才能工作,我们从最关键的步骤开始:
1. 在前端代码中导入并启动Local-Time
打开app/javascript/application.js,添加以下代码:
import LocalTime from "local-time" LocalTime.start()
这一步是核心——importmap pin只是告诉Rails这个包的CDN地址,但只有在JS里导入并调用start(),Local-Time才能监听页面上的data-local属性,把绝对时间转换成相对时间。
2. 确认time_tag的属性配置正确
你的time_tag代码看起来没问题,但可以再核对一下格式:
Posted: <%= time_tag post.created_at, "data-local": "time-ago" %>
time-ago确实是Local-Time用来渲染相对时间的合法取值,只要post.created_at是有效的时间对象(不是nil或字符串),这部分就没问题。
3. 检查浏览器控制台的错误提示
打开浏览器开发者工具(按F12),切换到Console标签页,看看有没有类似ReferenceError: LocalTime is not defined的错误:
- 如果出现这个错误,说明导入没生效,可以做这几件事:
- 确认你已经保存了
application.js的修改 - 重启Rails服务器(修改importmap或application.js后,有时候需要重启才能生效)
- 强制刷新页面(Ctrl+Shift+R),清除浏览器缓存
- 确认你已经保存了
4. 验证importmap配置有效性
你的importmap.rb里的配置:
pin "local-time", to: "https://ga.jspm.io/npm:local-time@2.1.0/app/assets/javascripts/local-time.js"
这个地址是有效的,版本也兼容,不需要调整。
最后测试
完成上面的步骤后,重启服务器,强制刷新页面,应该就能看到预期的相对时间(比如“5分钟前”)了。如果还是不行,可以先创建一个极简的测试页面,只包含time_tag代码,排除富文本功能或其他代码的干扰,确认Local-Time本身能正常工作。
内容的提问来源于stack exchange,提问作者roman
相关产品推荐
相关产品推荐

