通过地图分配红宝石哈希值不一致的地方

时间:2019-09-09 22:14:15

标签: ruby-on-rails arrays ruby hash

我有一张在使用之前必须组装的地图...

mailList = Customers.map do |customer|
{
  :username => customer.name,
  :email => customer.email,
  :last_ip_v4 => customer.ipv4,
  :last_ip_v6 => customer.ipv6
}
end

这适用于许多测试用户,但并非所有用户都具有最后一个ipv4和最后一个ipv6。如果不这样做,ruby会出错,但是我宁愿它只分配nil。我该怎么办?

2 个答案:

答案 0 :(得分:2)

即使ipv4和ipv6为nil,也不应引发错误。我认为这里的语法不正确,或者Customers为nil。尝试这种方式:

mailList = Customer.all.map do |customer|
  {
    username: customer.name,
    email: customer.email,
    last_ip_v4: customer.ipv4,
    last_ip_v6: customer.ipv6
  }
end

答案 1 :(得分:1)

如果您确定这一行,

mailList = Customers.map do |customer|

可以正常工作(可能是在使用错误约定的情况下),然后尝试检查ipv4和ipv6的零例,并将列表构造为,

    mailList = construct_list Customers
    def construct_list data
      list = []
      hash ={}
      data.map do |customer|
        hash[:username] = customer.name
        hash[:email] = customer.email
        customer.ipv4.nil? ? hash[:last_ip_v4] = nil : hash[:last_ip_v4] = customer.ipv4
        customer.ipv6.nil? ? hash[:last_ip_v6] = nil : hash[:last_ip_v6] = customer.ipv6
        list << hash
      end
      list
    end

尽管它可能不是最佳选择,但它会帮助您一段时间。