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
相关产品推荐
相关产品推荐

