我有代码:
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个错误都不正确。
答案 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