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

このコードはどこかのモデルにあると思います。ベータコードを保持するモデルを作成して、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?配列のメソッドを使用できます。

于 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 に答える