请帮助您使用此测试版代码,我该如何解决?

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

我有代码:

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

我假设这个代码在某个模型中。 您可以尝试创建一个包含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? 数组的方法。

看起来您只想查看数组是否包含特定代码,因此您应该使用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