请帮助这个测试版代码,我该如何解决?

时间:2011-07-13 03:46:02

标签: ruby-on-rails ruby arrays dry beta

  

可能重复:
  Why doesn't this code produce the desired result?

我有代码:

def check_beta_code
    beta_code_array = ['AAAAAAAAAA', 'BBBBBBBBBB', 'CCCCCCCCCC', 'DDDDDDDDDD', 'EEEEEEEEEE']
    beta_code_array.each do |code|
        if :beta_code != code
            errors.add(:beta_code, "Invalid Beta Code")
        end
    end 
end

此代码的问题在于,即使有人输入了正确的密码,仍会生成4个错误,因为其他4个错误都不正确。

2 个答案:

答案 0 :(得分:1)

我假设这段代码在某个模型中。您可以尝试创建一个包含beta代码的模型,并在DB中存储一些值。然后,只需查询数据库的代码并查看是否匹配:

# model
class BetaCode < ActiveRecord::Base
  # assumes a field named 'code'
end

# add some codes (via migration, console, manually, etc)
['AAAAAAAAAA', 'BBBBBBBBBB', 'CCCCCCCCCC', 'DDDDDDDDDD', 'EEEEEEEEEE'].each do |code|
  BetaCode.create(:code => code )
end

# and check for a match when user submits code (controller)
@code = BetaCode.find_by_code(user_code)

if @code.present?
  # user is approved
else
  # sorry, no luck
end

如果您想使用自己的代码段,可以随时使用member?方法获取数组。

答案 1 :(得分:0)

看起来您只想查看数组是否包含特定代码,因此您应该使用find_index方法。它返回您要查找的元素的索引,或者在找不到元素时返回nil(这是我们感兴趣的情况)。

def check_beta_code(code)
    beta_code_array = ['AAAAAAAAAA', 'BBBBBBBBBB', 'CCCCCCCCCC', 'DDDDDDDDDD', 'EEEEEEEEEE']
    return beta_code_array.find_index(code) != nil
end

check_beta_code 'foobar' # false
check_beta_code 'AAAAAAAAAA' # true