2014-09-02 99 views
0

创建迁移到预定义属性可以具有的值时有什么办法吗?Rails用户 - 与预定义角色的角色关系?

class User < ActiveRecord::Base 
    belongs_to :role 
end 

class Role < ActiveRecord::Base 
    has_many :users 
end 

和我的迁移:

class CreateRoles < ActiveRecord::Migration 
    def change 
    create_table :roles do |t| 
     t.string :name # (regular, admin, etc) => how can we define these as a list? 
     t.timestamps 
    end 
    end 
end 

class AddRoleToUser < ActiveRecord::Migration 
    def change 
    add_column :users, :role_id, :integer 
    end 
end 
+0

您可以在创建角色表后立即运行Rails代码。像夹具导入可以工作 – MrYoshiji 2014-09-02 17:10:21

回答

1

一种方法是使用一个validation like in this question及其两个很好的答案。这验证了给定列中的值是定义的值列表之一。您可以将验证添加到您的用户模型中,并完全抛弃角色模型,或将其添加到角色的名称字段。这可能是最简单,最Rails的方式。您可以在您的应用程序中定义一个包含已批准角色列表的常量,然后使用最适合您的任何维护该列表的常量。

另一种方法是使您的角色模型成为ActiveHash模型而不是ActiveRecord。 ActiveHash允许您设置像ActiveRecord模型一样的模型,但不是存储在数据库中,而是模型文件中由散列定义的只读模型。 (我非常简单地说明ActiveHash是如何工作的,但我认为这是一个开始。)再次,您可以使用应用程序常量来维护哈希。

将角色保留为模型的好处在于,如果您决定走这条路线,它允许用户拥有多个角色。