0

因此,控制器中有方法:

 def create
    email=params[:email]
    email=email.downcase
    user = User.find_by_email(email)
    if user && user.authenticate(params[:password])&& user.confirmed
      if session[:was_going]
      @url=session[:was_going]
      session[:was_going]=nil
      end
      @status=true
      cookies[:auth_token] = {:value => user.auth_token, :expires => Time.now + 30.days }
    elsif user && !user.confirmed
      @status=false
      @unconfirmed=true
    else
      #@unconfirmed=false  commented line
      @status=false
    end
    respond_to do |format|
      format.js{[@status, @url]}
    end
  end

它响应 format.js。在身份验证过程的任何情况下,我都有布尔变量,我将其传递给 JS - @status(是否经过身份验证),@unconfirmed - 特殊消息,以及只是无效输入(如果 @status 和 @unconfirmed 都是假的)。注意注释行。

这是js模板:

if(<%=@status %>) {
    window.location.replace("<%= @url %>")

}
else {
    if (<%=@unconfirmed %>) {
        $('.sign_in').replaceWith("<%= j render :file=> 'signs/index.html.erb' %>")
        $('.signs_form').prepend("<div id='errors_of_sign'> Check your mailbox on <br /> confirmation letter </div> ")
        $('.signs_form').css({"margin-top":"30px"})
        $('.facebook_sign').css({"margin-top":"80px"})
        $('.sign_in').fadeIn('fast')

       }
    else{
        $('.sign_in').replaceWith("<%= j render :file=> 'signs/index.html.erb' %>")
        $('.signs_form').prepend("<div id='errors_of_sign'> Email or password are incorrect </div> ")
        $('.signs_form').css({"margin-top":"30px"})
        $('.facebook_sign').css({"margin-top":"80px"})
        $('.sign_in').fadeIn('fast')

    }
}

并且有麻烦 - 当没有注释行时,else语句的代码根本不起作用。然后我添加了那行,现在一切正常。

你能解释一下JS的这种行为吗?我的意思是,如果没有变量@unconfirmed,那么 ruby​​ 应该返回 nil,这在我知道的任何语言的布尔函数中等于 false,包括 JS。

4

1 回答 1

0

你对 ruby​​ 的看法是正确的,它会返回 nil ,如果没有声明但 JS 不知道 nil 是什么。Js 知道“真”或“假”

'nil' 没有在 JS 中定义。

在控制台上自己尝试

于 2013-05-24T19:23:44.057 回答