1

几个月前我创建了数组来处理用户配置文件详细信息的编辑。当显示用户注册的国家/地区时,我点击数组并使用数据库中存储的整数获得我想要的结果。

在我的用户模型中,我将国家/地区的完整列表存储在一个数组中:

# encoding: UTF-8
class User < ActiveRecord::Base   

     COUNTRY_AND_ISO_CODE   = [
          ['Any', nil],
          ['United Kingdom', 826],
          ['United States', 840],
          ['-----------', ' '],
          ['Afghanistan', 4],
          ['Ãland Islands', 248],
          ['Albania', 8],
          ['Algeria', 12],
          ['American Samoa', 16],
          ['Andorra', 20],
          ['Angola', 24],
          ['Anguilla', 660],
          ['Antarctica', 10],
          ['Antigua and Barbuda', 28],
          ['Argentina', 32],
          ['Armenia', 51],
          ['Aruba', 533],

把这个放在我看来:

= User::COUNTRY_AND_ISO_CODE[@profile.country].first

在我的视图中显示此结果,例如:

 United Kingdom

我遇到的问题是大型国家/地区阵列。对于某些配置文件,它似乎有效,但大多数我收到此错误:

 undefined method `first' for nil:NilClass

我知道每个配置文件的@profile.country 都不是零,所以不确定这个错误来自哪里。如果我删除对数组的调用并且在我的视图中只有 @profile.country 它会按预期显示存储的整数。

我的其他数组没有遇到这个问题。例如,军事状态、性别、性取向。所以我想知道这是否与数组和内存的大小有关?我不知道这就是我问的原因。

我即将采取另一条路线,该路线在我提出的另一个问题中提出,方法是创建另一个存储国家名称的表,并使用存储在配置文件表中的整数从国家/地区表中获取正确的国家/地区。我想避免这种情况,因为当我最初有 1 次调用时,这是对 db 的 2 次调用。

知道我当前的代码有什么问题吗?我不明白为什么它适用于某些配置文件而不适用于其他配置文件。我不需要检查存储的国家整数,因为我创建了一个用国家更新每个用户的 rake 任务。

其他问题:如何在 ruby​​ on rails 中显示选择字段值而不是它们关联的存储整数?

希望你能帮忙

另外,如果你标记我,请给出一个理由。我来这里是为了从我的错误中吸取教训,也许我的错误可以帮助其他遇到类似问题的人。

亲切的问候

4

3 回答 3

2

尝试:

User::COUNTRY_AND_ISO_CODE.rassoc(@profile.country).try(:first)
于 2012-06-11T09:11:15.563 回答
1

您需要一个哈希值才能使此User::COUNTRY_AND_ISO_CODE[@profile.country].first代码正常工作。只需用哈希替换您的数组,例如:

COUNTRY_AND_ISO_CODE   = {
 'Any' => nil,
 'United Kingdom' => 826,
 'United States' => 840,
 # ..etc.
}

..并且不要忘记为此代码编写测试;)

于 2012-06-11T09:10:49.633 回答
1

ary[index]按索引返回一个元素,所以

COUNTRY_AND_ISO_CODE[0] # => ['Any', nil]
COUNTRY_AND_ISO_CODE[1] # => ['United Kingdom', 826]
COUNTRY_AND_ISO_CODE[2] # => ['United States', 840]

如果@profile.country826COUNTRY_AND_ISO_CODE[@profile.country]返回数组中的第 826 个元素,或者nil如果没有这样的元素。

于 2012-06-11T09:25:21.127 回答