如何将空白元素添加到数组的索引[0]

时间:2015-10-06 03:43:08

标签: arrays ruby ruby-on-rails-4

我有UserRole型号。

在角色表中,我有。

ID      name
1       admin
2       normal_user
3       guest

在用户表中,我有role_id

我正在使用enum给我的用户,我尝试了这个。

class User < ActiveRecord::Base
    enum role_id: (Role.all).map {|k,v| k[:name]}
end

这个问题是0 =&gt; admin,1 =&gt; normal_user,2 =&gt;客人,而不是身份证。我怎么解决这个问题?我想将空元素添加到索引[0]。

像这样的东西。

enum role_id: ["", :admin, :normal_user, :guest]

4 个答案:

答案 0 :(得分:2)

这可以解决您的问题。

enum role_id: [''] + Role.all.map {|k,v| k[:name]}

答案 1 :(得分:2)

class User < ActiveRecord::Base
  enum role_id: ([''] + Role.all.map(&:name))
end

答案 2 :(得分:1)

根据enum的文档,你可以给枚举一个Hash而不是一个数组,所以我认为你可以这样轻松地建立一个Hash:

enum role_id: (Role.all).each_with_object({}) do |row, hash| 
  hash[row[:name]] = row[:id] 
end

这样你就不需要在表中添加一个空行,每个名字都映射到正确的id。

答案 3 :(得分:0)

您需要将以下部分更新为:

enum_role_id:   (Role.all).map {|k,v| k[:name]}.insert(0,"")