Rails:如何解析数据库存储的表达式以实际值填充表单字段
解决表单默认值显示字面量
current_user.email的问题 问题核心是数据库存储的field.default_value是字符串字面量(比如"current_user.email"),直接赋值给表单value属性时,Rails会把它当成普通文本输出,不会解析成对应的用户属性值。
解决方案
通过instance_eval在视图上下文里动态解析这个字符串,获取实际的用户属性值:
<%= form.text_field field.name, required: field.required, value: self.instance_eval(field.default_value), class: "form_control" %>
安全与容错处理
instance_eval比全局的eval更安全,它只会在当前视图的上下文环境中执行代码,避免全局污染- 如果存在未登录场景(
current_user为nil),需要添加判断防止报错:<% default_value = current_user.present? ? self.instance_eval(field.default_value) : "" %> <%= form.text_field field.name, required: field.required, value: default_value, class: "form_control" %> - 确保数据库中存储的
default_value是合法、安全的Ruby表达式(仅限current_user相关属性调用,禁止存储复杂逻辑或恶意代码)
内容的提问来源于stack exchange,提问作者spacerobot
相关产品推荐
相关产品推荐

