【发布时间】: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? 被评估为假” - 嗯?如果
"<%= current_user.blank? %>"评估为空字符串以外的任何内容,则您的 JS if 条件将为 false。首先评估所有服务器端代码(显然是在服务器上),然后浏览器评估 JS。 -
user_signed_in?使用 devise helper 检查用户是否登录
-
错误 1:
#blank?方法将返回 Rubytrue或false,因此您的user_signed_inJavaScript 变量将保存字符串'true'或字符串'false'。错误 2:您的所有 Ruby 将在您的 JavaScript 之前执行,因此在检查user_signed_in的值(在 JavaScript 中)之前,将评估current_user.email(在 Ruby 中)。
标签: javascript jquery ruby-on-rails forms autofill