我有User
和Role
型号。
在角色表中,我有。
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]
答案 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,"")