Rails中simple_form嵌套属性输入字段不显示问题求助
嘿,我帮你看了下代码,发现几个可能导致嵌套评论字段不显示的问题,咱们一步步来解决:
1. 编辑页面未初始化嵌套的评论对象
你在new动作里已经加了@incident.comments.build,所以新建事件时应该能渲染字段,但编辑页面(edit动作)是空的——如果要编辑的事件还没有任何评论,simple_fields_for :comments找不到关联的对象,自然不会渲染输入框。
修改incidents_controller.rb里的edit方法:
def edit # 若当前事件没有评论,就新建一个空评论供表单渲染 @incident.comments.build if @incident.comments.empty? end
2. 嵌套属性参数权限需要补充
如果之后需要更新已有的评论,你的incident_params里没有允许comments_attributes的:id字段,这会导致系统无法识别要更新的评论记录。建议补充上,同时如果需要支持删除评论,也可以加上:_destroy:
def incident_params params.require(:incident).permit( :info, :subject, :status, comments_attributes: [:id, :info, :_destroy] ) end
3. 关于reject_if的小提示
你设置的reject_if: proc { |attributes| attributes['info'].blank? }是用来过滤提交时空评论的,这个逻辑本身没问题,但如果在测试时发现新建页面也不显示字段,可以暂时注释掉这个条件排查(不过正常情况下,new动作里构建的空对象应该能被渲染,这个只是兜底排查点)。
额外验证点
- 访问
/admin/incidents/new页面试试,这里已经有@incident.comments.build,应该能看到评论输入框; - 查看页面的HTML源代码,确认是否生成了评论相关的表单字段(如果生成了但看不见,可能是CSS隐藏了,但从截图看应该是根本没生成)。
内容的提问来源于stack exchange,提问作者Juanse Cora
相关产品推荐
相关产品推荐

