【问题标题】:Why is the if block being evaluated为什么要评估 if 块
【发布时间】:2018-05-13 20:32:01
【问题描述】:

我正在开发一个 Rails 项目,如果用户已登录,我将通过 JQuery 从电子邮件字段中自动填写表单。我正在使用设计进行身份验证。

var user_signed_in = "<%= current_user.blank? %>";

if (!user_signed_in){
  var user_signed_in = "<%= current_user.email %>";
  $('input#inquiry_from_email').val(user_signed_in);
}

根据代码,不应评估 if 块内的内容,但如果是访客用户,我会收到未定义的方法 'email' 的 nil 类错误。

如果current_user.blank?被评估为假,我正在事先在 if 块中检查它,我不明白为什么要评估 if 中的语句。

【问题讨论】:

  • “如果 current_user.blank? 被评估为假” - 嗯?如果"&lt;%= current_user.blank? %&gt;" 评估为空字符串以外的任何内容,则您的 JS if 条件将为 false。首先评估所有服务器端代码(显然是在服务器上),然后浏览器评估 JS。
  • user_signed_in?使用 devise helper 检查用户是否登录
  • 错误 1:#blank? 方法将返回 Ruby truefalse,因此您的 user_signed_in JavaScript 变量将保存字符串 'true' 或字符串 'false'。错误 2:您的所有 Ruby 将在您的 JavaScript 之前执行,因此在检查 user_signed_in 的值(在 JavaScript 中)之前,将评估 current_user.email(在 Ruby 中)。

标签: javascript jquery ruby-on-rails forms autofill


【解决方案1】:

此代码将被执行,因为您在 JavaScript 代码中有 ruby​​ 代码。提供页面时,它将执行 JavaScript 代码。您需要将整个代码放在 if 块中

<% if current_user %>  
    var user_signed_in = "<%= current_user.email %>";
    $('input#inquiry_from_email').val(user_signed_in);  
<% end %>

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2013-05-03
    • 2012-05-13
    • 2013-06-01
    相关资源
    最近更新 更多