ruby-on-rails - 为什么我得到 undefined method `first' for nil :NilClass when trying to pull value from array in ruby on rails?

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

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

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

# 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/

相关文章:

ruby-on-rails - 回形针错误

mysql - Rails安装mysql错误

ruby-on-rails - 重定向 ruby​​ 脚本的 shell 输出

ruby - 如何在 Ruby 中一次读取一个文件字节?

ruby-on-rails - Rails 更改 form_for 中提交的路由

javascript - 将 JavaScript 数据发布到 Rails 的最佳方式

ruby-on-rails - Rails JOIN 模型依赖销毁

ruby - 位于屏幕底部的输入行

mysql - Rails : differences in db/schema. rb - null: false at created_at/updated_at 列

ruby-on-rails-3 - 使用 except 的范围不起作用 Rails