Rails中input标签存储erb值方法及空格截断问题排查
Rails中把ERB值存入Input标签 & 解决空格截断问题
嘿,这个问题我之前也碰到过!咱们先解决你遇到的空格截断问题,再聊聊Rails里把ERB值放进input的正确姿势。
为什么人名会被空格截断?
你遇到的John Doe只显示John的问题,本质是HTML解析规则导致的:如果你的input标签value属性没加双引号,比如写成:
<input type="text" value=<%= @user.name %>>
浏览器会把空格当成属性的分隔符,将John Doe解析成value="John"和一个无意义的Doe属性,自然就只显示前半部分了。
正确的解决方法
方法1:手动编写HTML时给value加双引号
最简单的修复方式就是给value属性加上双引号,把ERB输出完整包裹在里面:
<input type="text" value="<%= @user.name %>">
这样浏览器就会把整个字符串作为value的内容,空格不会再触发属性截断。
方法2:使用Rails表单辅助方法(更推荐)
Rails提供了专门的表单辅助方法,不仅能自动处理引号和转义,还能简化表单参数的处理,更符合Rails的最佳实践:
- 如果是无模型的表单,用
text_field_tag:<%= text_field_tag 'full_name', @person.name %> - 如果是关联模型的表单,使用Form Builder更便捷:
<%= form_with model: @person do |f| %> <%= f.text_field :name %> <% end %>
这些辅助方法会自动生成格式正确的HTML,完全不用你担心空格截断的问题,还能帮你自动转义特殊字符,避免XSS安全风险。
内容的提问来源于stack exchange,提问作者chase dougherty
相关产品推荐
相关产品推荐

