0

可能重复:
为什么这段代码没有产生预期的结果?

我有代码:

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 个不正确。

4

2 回答 2

1

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

# 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?数组的方法。

于 2011-07-13T04:02:15.743 回答
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
于 2011-07-13T03:56:57.380 回答