2011-07-13 99 views
0

可能重複:
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個不正確。

+1

假設你想在沒有錯誤的情況下返回代碼。如果是這樣,那麼如果有匹配,你應該返回,如果你低於循環,則應該失敗。 – drekka

回答

1

我假設這段代碼在某個模型中。您可以嘗試創建一個包含測試代碼並將一些值存儲在數據庫中的模型。然後,它只是一個查詢碼的數據庫,看是否有匹配的事情:

# 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?方法的數組。

+0

謝謝,我用這個,但裏面找到'includes?' – Vasseurth

0

看起來你只是想看看數組是否包含特定的代碼,所以你應該使用find_index方法。它返回你正在尋找的元素的索引,或者當元素找不到時(這是我們感興趣的情況)。

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 
+0

'\t高清check_beta_code \t \t \t errors.add(:beta_code, 「無效的測試代碼」)!如果(corect_code(?:beta_code))? \t年底 \t \t高清CORRECT_CODE(代碼) \t \t beta_code_array = [ 'AAAAAAAAAA', 'BBBBBBBBBB', 'CCCCCCCCCC', 'DDDDDDDDDD', 'EEEEEEEEEE'] \t \t返回beta_code_array.find_index(代碼) \t年底 end'將這項工作? – Vasseurth

+0

@Planetpluto,我想它會的。你應該檢查一下自己。 – zneak