Ruby on Rails健身追踪项目新建统计表单如何默认填充用户上次数据
实现方案
你不需要用hidden_field实现该需求,更合理的方式是在初始化新建记录时直接带入用户上一次提交的数据,这样表单会自动填充默认值,用户可见可修改,体验更友好。
1. 修改StatsController的new动作
在新建记录前先拉取当前用户最近的一条统计记录,将对应字段值赋值给新实例即可:
# GET /stats/new def new # 取用户最近的一条统计记录 last_stat = current_user.stats.order(created_at: :desc).first # 存在历史记录则带入所有字段的默认值,否则新建空实例 @stat = if last_stat current_user.stats.new( mile: last_stat.mile, weight: last_stat.weight, waist: last_stat.waist, hips: last_stat.hips, leftleg: last_stat.leftleg, rightleg: last_stat.rightleg, leftarm: last_stat.leftarm, rightarm: last_stat.rightarm, chest: last_stat.chest, bust: last_stat.bust, wallsit: last_stat.wallsit, plank: last_stat.plank, pushup: last_stat.pushup, burpee: last_stat.burpee, situp: last_stat.situp, jumpsquat: last_stat.jumpsquat ) else current_user.stats.new end end
2. 表单无需修改
你现有表单的text_field会自动读取@stat实例的对应字段值作为默认填充内容,用户如果修改就用新值,不修改就沿用上次的历史值,提交后直接入库不会出现空值。
补充说明
- 如果你确实需要隐藏某个字段不让用户修改,才需要用到
hidden_field,用法和text_field完全一致,比如要隐藏一英里跑用时字段,把对应位置的<%= form.text_field :mile %>替换为<%= form.hidden_field :mile %>即可,不过该方式用户看不到默认值,不推荐常规场景使用。 - 可以在
Stat模型中给必填字段加presence: true校验,避免用户首次提交时字段为空,确保数据完整性。 - 你现有列表页两次遍历
@stats分别展示跑步数据和体重数据,可合并为一次遍历优化性能,避免重复渲染。
内容的提问来源于stack exchange,提问作者Bj Petrie
相关产品推荐
相关产品推荐

