我严重写了我的红宝石条件

时间:2017-09-02 18:11:49

标签: ruby sinatra

我不明白为什么条件不起作用, 如果用户名和密码为空,我希望执行该部分

post '/login' do

  credentials = CGI.parse request.body.read

  if credentials['username'].nil? || credentials['password'].nil?
    status 603
    return ;
  end
end

2 个答案:

答案 0 :(得分:2)

您使用了错误的逻辑运算符OR(||)而不是AND(&&

post '/login' do

  credentials = CGI.parse request.body.read

  if missing_credentials?
    status 603
    return ;
  end
end

private

def missing_credentials?
  credentials['username'].nil? && credentials['password'].nil?
end

答案 1 :(得分:1)

您的问题表明如果用户名和密码为nil,您希望执行代码。如果用户名或密码为零,则执行代码。

但更有意义的是,如果任何一个部分丢失,您希望代码执行。假设这是你想要的,我会写条件为:

unless credentials['username'] && credentials['password']

如果你确实只想在两个部分都缺失的情况下执行代码,那么你可以这样做:

unless credentials['username'] || credentials['password']