我几个月前创建了数组来处理用户个人资料详细信息的编辑。当向后显示用户注册国家/地区时,我利用数组并使用数据库中存储的整数获得我想要的结果。
在我的用户模型中,我将完整的国家/地区列表存储在一个数组中:
# 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
在我的 View 中显示此结果,例如:
United Kingdom
我遇到的问题是大国家/地区数组。对于某些配置文件,它似乎有效,但大多数我收到此错误:
undefined method `first' for nil:NilClass
我知道每个配置文件的 @profile.country 都不是 nil,所以不确定这个错误是从哪里来的。如果我删除对数组的调用并且在我的 View 中只有 @profile.country,它会按预期显示存储的整数。
我的其他阵列没有遇到这个问题......例如martial_status,性别,性取向。所以我想知道这是否与数组和内存的大小有关?我不知道这就是我问的原因。
我即将采取另一条路线,这是我提出的另一个问题中建议的,方法是创建另一个存储有国家/地区名称的表,并使用配置文件表中存储的整数从国家/地区表中获取正确的国家/地区。不过,我想避免这种情况,因为这是对数据库的 2 次调用,而我最初有 1 次调用。
知道我当前的代码有什么问题吗?我不明白为什么它适用于某些配置文件而不适用于其他配置文件。我不需要检查存储的国家/地区整数,因为我创建了一个为每个用户更新国家/地区的 rake 任务。
其他问题:How do I display select field values rather than their associated stored integers in ruby on rails?
希望能帮到你
此外,如果您给我打分,请说明原因。我来这里是为了从我的错误中吸取教训,也许我的错误可以帮助其他遇到类似问题的人。
亲切的问候
最佳答案
尝试:
User::COUNTRY_AND_ISO_CODE.rassoc(@profile.country).try(:first)
关于ruby-on-rails - 为什么我得到 undefined method `first' for nil :NilClass when trying to pull value from array in ruby on rails?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10976991/