使用Rails 6.1.7及最新active_scaffold创建记录时出现特定消息,是否为框架产物?
问题解决:ActiveScaffold创建记录显示对象内存标识提示
问题原因
这确实是ActiveScaffold的默认行为。ActiveScaffold完成记录创建操作后,会自动生成成功提示消息,默认逻辑是调用对应模型实例的to_s方法拼接文本。而Rails模型的默认to_s实现就是输出对象的内存地址格式(比如#<Docket:0x0000013800ec4df0>),所以才会出现这个不友好的提示。
解决方法
有两种简单的修复方式:
1. 重写模型的to_s方法
直接在Docket模型中定义to_s方法,返回有业务意义的内容,比如使用模型的某个字段(假设你有title字段):
class Docket < ApplicationRecord def to_s # 优先显示title,无值则显示ID title || "Docket ##{id}" end end
修改后,创建成功的提示会变成Created 你的标题内容或者Created Docket #1这类清晰文本。
2. 自定义ActiveScaffold的成功消息
如果不想修改模型,也可以在控制器的ActiveScaffold配置里直接指定成功消息格式:
class DocketsController < ApplicationController active_scaffold :docket do |config| # 自定义创建成功的消息模板 config.create.success_message = lambda { |record| "创建了记录:#{record.title || "Docket ##{record.id}"}" } end end
排查思路
这类CRUD后的提示通常由框架通过flash消息实现,ActiveScaffold的默认逻辑就是复用模型的to_s生成动态提示文本。你可以查看ActiveScaffold的CreateAction相关代码确认这一点,但实际修复无需深入源码,用上面两种方法就能快速解决。
内容的提问来源于stack exchange,提问作者DenisM
相关产品推荐
相关产品推荐

