嗨,所有新的ruby都是if if语句的有效语法吗?
if (verify_login_id = Login.where(params[:email_address], "active" =>1).select('id')# => [#<Login id: 767>]
verify_admin_id = Admin.where("login_id" => verify_login_id.first.id).exists? #=> true)
puts "trueee"
else
raise(ActiveRecord::RecordNotFound.new("Authorization is required to access this endpoint!"))
end
答案 0 :(得分:1)
尽管在if
语句中设置变量值在语法上是有效的,但这是非常有问题的。
它可能被错误地视为比较而不是赋值,并且在许多情况下,它是某人试图进行比较并将等于谓词==
与赋值运算符=
混淆的结果。这就是为什么今天很多IDE都会将这样的代码标记为警告和可能的错误。
在您的代码中,它似乎也很不必要......将其分为两个更易读的行:
verified_login = Login.where(params[:email_address], "active" =>1).select('id').first # => [#<Login id: 767>]
if verified_login && Admin.where("login_id" => verified_login.id).exists? #=> true
puts "trueee"
else
raise(ActiveRecord::RecordNotFound.new("Authorization is required to access this endpoint!"))
end
更多观察 - 您对verify_login_id
的分配不是ID,而是Login
对象,而您对verify_admin_id
的分配也不是id - 而是布尔值(和你一样)反正都没有使用它)。这可能看起来不仅仅是重点 - 但它增加了一个难以理解且无法维护的代码。
答案 1 :(得分:0)
不,它不是有效的代码。在第二行中,它包含一个无效的#-comment,它已从代码中删除了一个)
。 (确切剪辑为#=>true)
,应为) #=>true
)
我已从代码中删除了注释,添加了缺少的括号,解析器似乎接受了它。我当然无法运行它。所以,尝试这个,可能工作:
if (verify_login_id = Login.where(params[:email_address], "active" =>1).select('id')
verify_admin_id = Admin.where("login_id" => verify_login_id.first.id).exists?)
puts "trueee"
else
raise(ActiveRecord::RecordNotFound.new("Authorization is required to access this endpoint!"))
end
关于if
中的多线条件 - 是的,这是可能的。有时直接,有时用一个小技巧。试试这个:
if (1+2 >=
3)
puts "as"
end
它有效(至少在Ruby 1.9.3上)。但是,这不会:
if (1+2
>=
3)
puts "as"
end
这是因为Ruby解释器/编译器的设计内部特定。在最后一个示例中,为了使其工作,您需要通知Ruby 行尚未结束。以下示例有效:
if (1+2 \
>=
3)
puts "as"
end
请注意在有问题的行
末尾添加的\