【问题标题】:Please help with this beta code, How can I fix it? [duplicate]请帮助解决此测试代码,我该如何解决? [复制]
【发布时间】:2011-07-13 03:46:02
【问题描述】:

可能重复:
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 个不正确。

【问题讨论】:

  • 如果代码匹配,您可能希望不出错地返回。如果是这样,那么如果匹配,则应该返回,如果低于循环,则应该返回。

标签: ruby-on-rails ruby arrays dry beta


【解决方案1】:

我假设这段代码在某个模型中。您可以尝试创建一个包含 beta 代码的模型并将一些值存储在数据库中。然后只需在数据库中查询代码并查看是否匹配即可:

# 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

如果你想使用你的 sn-p,你总是可以对数组使用 member? 方法。

【讨论】:

  • 谢谢,我用过这个但在里面找到includes?
【解决方案2】:

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

【讨论】:

  • ` def check_beta_code errors.add(:beta_code, "Invalid Beta Code") if !(corect_code?(:beta_code)) end def correct_code?(code) beta_code_array = ['AAAAAAAAAA', 'BBBBBBBBBB ', 'CCCCCCCCCC', 'DDDDDDDDDD', 'EEEEEEEEEE'] return beta_code_array.find_index(code) end end` 这样行吗?
  • @Planetpluto,我想会的。不过你应该检查一下自己。
猜你喜欢
  • 2021-05-05
  • 2013-12-22
  • 2012-08-31
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2022-12-07
  • 2021-12-28
  • 2014-09-23
相关资源
最近更新 更多