You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails erb预填充文本输入框:多词值截断问题求助

解决Rails ERB中输入框多词value被截断的问题

嘿,这个坑我之前踩过!你遇到的问题本质是HTML属性的解析规则在搞鬼——当你没给value属性加引号时,浏览器会把空格后的内容当成新的HTML属性,自然就截断了前面的内容。咱们来一步步解决:

问题根源

假设你之前的代码是这样写的:

<input type="text" name="city" value=<%= student.city %>>

当student.city是"San Francisco"时,渲染后的HTML会变成:

<input type="text" name="city" value=San Francisco>

浏览器会把它解析成value="San",后面的Francisco被当成一个空值的属性,所以输入框只显示San。

正确的解决方法

方法1:给value属性加上双引号

这是最直接的修复方式,把ERB嵌入的内容放在双引号里:

<input type="text" name="city" value="<%= student.city %>">

这样渲染后的HTML会是正确的:

<input type="text" name="city" value="San Francisco">

方法2:用Rails内置的Form Helper(更推荐)

Rails的表单助手会自动处理属性的引号和特殊字符转义,完全不用手动操心:

<%# 如果你用的是form_with或者form_for %>
<%= form.text_field :city %>

它会自动生成带正确引号的HTML,同时还能帮你处理表单提交的参数映射,一举两得。

额外安全提示

如果必须手动写HTML标签,记得对用户输入的内容做HTML转义(防止XSS攻击)。不过Rails 3及以后的版本中,ERB默认会自动转义输出内容,所以像value="<%= student.city %>"这样写已经足够安全。如果是老版本,或者你关闭了自动转义,可以用h方法手动转义:

<input type="text" name="city" value="<%= h student.city %>">

内容的提问来源于stack exchange,提问作者Daniel Braunstein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:25:55