2011-07-13 8 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

私はこのコードがモデルのどこかにあると仮定しています。ベータコードを保持するモデルを作成し、DBにいくつかの値を格納することができます。そして、それは単にコードのための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?方法を使用することができます。

+0

ありがとう、私はこれを使用しましたが、内部に 'が含まれていますか? ' – Vasseurth

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

'\tデフ \t \t \t errors.add check_beta_code!? \tエンド \t \tデフcorrect_code(コード) \t \t beta_code_array =:(?beta_code)corect_code()場合(beta_code、 "無効なベータコード") [ 'AAAAAAAAAA'、 'BBBBBBBBBB'、 'C​​CCCCCCCCC'、 'DDDDDDDDDD'、 'EEEEEEEEEE'] \t \t戻りbeta_code_array.find_index(コード) \t端end'この作業でしょうか? – Vasseurth

+0

@Planetpluto、そうだろう。あなたは自分自身を確認する必要があります。 – zneak

関連する問題