【问题标题】:Rails confirmation popup text does not show if text comes from a controller variable如果文本来自控制器变量,Rails 确认弹出文本不显示
【发布时间】:2026-01-18 17:20:09
【问题描述】:

在我的 Rails 视图中的submit_tag 确认弹出窗口中,我正在尝试使用我的 Rails 控制器中的实例变量。在我的控制器中,我将变量定义为

@confirmation_msg = "test"

然后在我的.haml 视图中,我尝试将变量作为确认提示文本插入到我的submit_tag 中。

= submit_tag "Increase Limits", { onclick: "return confirm(#{@confirmation_msg})", class: "btn btn-danger"}

但是现在我的确认提示现在弹出为空白,没有文字。取消和确定按钮仍然存在。如果我将 "return confirm(#{@confirmation_msg})" 更改为 "return confirm('test')" 我会看到“测试”。当我尝试使用控制器中的变量时,为什么它是空白的?

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-5


    【解决方案1】:

    你是在设置字符串还是其他?

    @confirmation_msg = test <--- is this a variable that holds a string or you mispelled "test"?
    

    如果@confirmation_msg 在末尾是一个字符串,请用(单引号或双引号)将其括起来:

    "return confirm('#{@confirmation_msg}')"
    

    如果您有换行符和/或特殊字符,最好也转义内容:

    "return confirm('#{ j @confirmation_msg }')"
    

    j 方法是escape_javascript 方法的方便别名)

    【讨论】:

    • 是的,我设置 @confirmation_msg 等于一个字符串(更新了我的答案)。我尝试将变量括在单引号中并尝试使用 j 方法,但警报弹出窗口仍然显示空白
    • 渲染的 html 是什么?你确定@confirmation_msg 在那个时候确实有这个价值吗?您在浏览器的开发工具上看到任何错误吗?
    • 我确定@confirmation_msg 具有正确的值,因为我使用Rails.logger.info 将其注销,并且在我的服务器上看到了正确的值。我没有来自浏览器开发工具的任何错误。您指的是哪个呈现的 HTML?我似乎无法检查 javascript 警报弹出窗口。所有其他呈现的 HTML 都与之前相同
    • 页面上的 HTML。如果您检查浏览器上的元素,您应该会看到类似 &lt;input type="submit" onclick="......." value="Increase Limits" /&gt; 的内容。
    • submit_tag生成的HTML是&lt;input type="submit" name="commit" value="Increase Limits" onclick="return confirm()" class="btn btn-danger"